table(dataAll$Session, dataAll$Drug)
   
    MPH PBO SUL
  1  31  37  22
  2  28  29  33
  3  31  24  35
# turn drug conditions into factor levels
dataAll$Drug <- factor(dataAll$Drug, levels = c("MPH","SUL","PBO"));
dataAll$PutamenSplit <- factor(dataAll$PutamenSplit, levels = c("0","1"));
dataAll$CaudateSplit <- factor(dataAll$CaudateSplit, levels = c("0","1"));
dataAll$VSSplit <- factor(dataAll$VSSplit, levels = c("0","1"));


dataAll$DifEnd_Total <- dataAll$DifferentEnd/dataAll$Total # divide different end scores by total number of ideas
dataAll$DifEnd_Con <- dataAll$DifferentEnd/dataAll$Convergent_Pasta # divide different end scores by total number of ideas


# set contrasts to sum-to-zero
options(contrasts=c("contr.sum", "contr.poly"))

# set two dataframes for the contrast between MPH and PBO - between SUL and PBO
df_MPH <- dplyr::filter(dataAll, Drug %in% c("MPH","PBO"))  
df_SUL <- dplyr::filter(dataAll, Drug %in% c("SUL","PBO"))
data_PBO <- dplyr::filter(dataAll, Drug %in% c("PBO"))

print(summary(Placebo_PASTA_DE_Caudate), corr=F) # print summary without fixed effect correlation matrix

Call:
lm(formula = DifferentEnd ~ 1 + Caudate_ki.c, data = data_PBO, 
    REML = F)

Residuals:
    Min      1Q  Median      3Q     Max 
-5.8421 -1.8324 -0.2242  1.5334  6.9476 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)    7.6444     0.2932  26.076   <2e-16 ***
Caudate_ki.c  -0.3340     0.2948  -1.133     0.26    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.781 on 88 degrees of freedom
Multiple R-squared:  0.01438,   Adjusted R-squared:  0.003176 
F-statistic: 1.284 on 1 and 88 DF,  p-value: 0.2603
print(summary(Placebo_PASTA_DE_VS), corr=F) # print summary without fixed effect correlation matrix

Call:
lm(formula = DifferentEnd ~ 1 + VS_ki.c, data = data_PBO, REML = F)

Residuals:
    Min      1Q  Median      3Q     Max 
-6.1984 -1.7955 -0.1105  1.4734  7.0567 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   7.6444     0.2931  26.081   <2e-16 ***
VS_ki.c      -0.3388     0.2947  -1.149    0.253    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.781 on 88 degrees of freedom
Multiple R-squared:  0.01479,   Adjusted R-squared:  0.003597 
F-statistic: 1.321 on 1 and 88 DF,  p-value: 0.2535
print(summary(Placebo_PASTA_DE_Putamen), corr=F) # print summary without fixed effect correlation matrix

Call:
lm(formula = DifferentEnd ~ 1 + Putamen_ki.c, data = data_PBO, 
    REML = F)

Residuals:
   Min     1Q Median     3Q    Max 
-5.907 -1.685 -0.222  1.583  7.296 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)    7.6444     0.2902  26.340   <2e-16 ***
Putamen_ki.c  -0.5142     0.2918  -1.762   0.0816 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.753 on 88 degrees of freedom
Multiple R-squared:  0.03407,   Adjusted R-squared:  0.0231 
F-statistic: 3.104 on 1 and 88 DF,  p-value: 0.08157
##################### SUL #####################################################
##################### SUL #####################################################
##################### SUL #####################################################
##################### SUL #####################################################
##################### SUL #####################################################
SUL_Caudate_RAT <- lmer(Convergent_RAT ~ 1 + Drug*Caudate_ki.c + Session + (1 | ID), data = df_SUL, REML=F)
print(summary(SUL_Caudate_RAT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_RAT ~ 1 + Drug * Caudate_ki.c + Session + (1 | ID)
   Data: df_SUL

     AIC      BIC   logLik deviance df.resid 
   682.0    704.4   -334.0    668.0      173 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.33866 -0.61144 -0.09998  0.54320  2.60092 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.2652   0.515   
 Residual             2.1444   1.464   
Number of obs: 180, groups:  ID, 90

Fixed effects:
                    Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)          4.42458    0.30755 164.74835  14.387   <2e-16 ***
Drug1                0.15409    0.11104  90.69284   1.388   0.1686    
Caudate_ki.c        -0.03719    0.12278  89.75565  -0.303   0.7626    
Session              0.27938    0.14118 138.33452   1.979   0.0498 *  
Drug1:Caudate_ki.c   0.02673    0.10984  89.35964   0.243   0.8083    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
plot_model(SUL_Caudate_RAT, type = "pred", terms = c("Caudate_ki.c","Session","Drug"))
Error in plot_model(SUL_Caudate_RAT, type = "pred", terms = c("Caudate_ki.c",  : 
  could not find function "plot_model"

##################### MPH #####################################################
##################### MPH #####################################################
##################### MPH #####################################################
##################### MPH #####################################################
##################### MPH #####################################################
##################### RAT #####################################################

# MPH*Caudate interaction in predicting Convergent RAT
MPH_Caudate_RAT <- lmer(Convergent_RAT ~ 1 + Drug*Caudate_ki.c + Session + (1 | ID), data = df_MPH, REML=F)
print(summary(MPH_Caudate_RAT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_RAT ~ 1 + Drug * Caudate_ki.c + Session + (1 | ID)
   Data: df_MPH

     AIC      BIC   logLik deviance df.resid 
   699.2    721.6   -342.6    685.2      173 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.25533 -0.59926 -0.01159  0.62992  2.13551 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.4705   0.6859  
 Residual             2.2064   1.4854  
Number of obs: 180, groups:  ID, 90

Fixed effects:
                    Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)          4.42327    0.30110 161.40947  14.690   <2e-16 ***
Drug1                0.04512    0.11118  90.09481   0.406    0.686    
Caudate_ki.c        -0.11355    0.13309  90.10202  -0.853    0.396    
Session              0.22136    0.14032 125.40200   1.577    0.117    
Drug1:Caudate_ki.c  -0.05078    0.11165  90.01252  -0.455    0.650    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
plot_model(MPH_Caudate_RAT, type = "pred", terms = c("Caudate_ki.c","Session","Drug"))

plot(MPH_Caudate_RAT)

qqnorm(residuals(MPH_Caudate_RAT))


# MPH*Putamen interaction in predicting Convergent RAT
MPH_Putamen_RAT <- lmer(Convergent_RAT ~ 1 + Drug*Putamen_ki.c + Session + (1 | ID), data = df_MPH, REML=F)
print(summary(MPH_Putamen_RAT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_RAT ~ 1 + Drug * Putamen_ki.c + Session + (1 | ID)
   Data: df_MPH

     AIC      BIC   logLik deviance df.resid 
   700.0    722.4   -343.0    686.0      173 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.23723 -0.56564  0.01528  0.64409  2.14803 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.4789   0.6921  
 Residual             2.2107   1.4868  
Number of obs: 180, groups:  ID, 90

Fixed effects:
                     Estimate Std. Error         df t value Pr(>|t|)    
(Intercept)         4.408e+00  3.046e-01  1.615e+02  14.472   <2e-16 ***
Drug1               4.457e-02  1.113e-01  9.012e+01   0.400    0.690    
Putamen_ki.c       -5.166e-02  1.335e-01  9.008e+01  -0.387    0.700    
Session             2.291e-01  1.422e-01  1.263e+02   1.611    0.110    
Drug1:Putamen_ki.c -6.206e-04  1.131e-01  9.079e+01  -0.005    0.996    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
plot_model(MPH_Putamen_RAT, type = "pred", terms = c("Putamen_ki.c","Session","Drug"))

plot(MPH_Putamen_RAT)

qqnorm(residuals(MPH_Putamen_RAT))


# Sulpiride*VS interaction in predicting Convergent RAT
MPH_VS_RAT <- lmer(Convergent_RAT ~ 1 + Drug*VS_ki.c + Session + (1 | ID), data = df_MPH, REML=F)
print(summary(MPH_VS_RAT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_RAT ~ 1 + Drug * VS_ki.c + Session + (1 | ID)
   Data: df_MPH

     AIC      BIC   logLik deviance df.resid 
   700.1    722.5   -343.1    686.1      173 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.25335 -0.57046  0.01357  0.63473  2.18173 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.4812   0.6937  
 Residual             2.2104   1.4868  
Number of obs: 180, groups:  ID, 90

Fixed effects:
                Estimate Std. Error         df t value Pr(>|t|)    
(Intercept)     4.404675   0.304727 161.193156  14.454   <2e-16 ***
Drug1           0.044427   0.111291  90.117143   0.399    0.691    
VS_ki.c        -0.024468   0.133742  90.366488  -0.183    0.855    
Session         0.231004   0.142280 125.810262   1.624    0.107    
Drug1:VS_ki.c   0.005332   0.113054  90.738007   0.047    0.962    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
plot_model(MPH_VS_RAT, type = "pred", terms = c("VS_ki.c","Session","Drug"))

plot(MPH_VS_RAT)

qqnorm(residuals(MPH_VS_RAT))

##################### AUT #####################################################

# MPH*Caudate interaction in predicting divergent AUT
MPH_Caudate_AUT <- lmer(AUT_divergent ~ 1 + Drug*Caudate_ki.c + Session + (1 | ID), data = df_MPH, REML=F)
print(summary(MPH_Caudate_AUT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AUT_divergent ~ 1 + Drug * Caudate_ki.c + Session + (1 | ID)
   Data: df_MPH

     AIC      BIC   logLik deviance df.resid 
   368.5    390.8   -177.2    354.5      173 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.00602 -0.47336 -0.00095  0.51974  2.24790 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.4739   0.6884  
 Residual             0.1590   0.3988  
Number of obs: 180, groups:  ID, 90

Fixed effects:
                    Estimate Std. Error        df t value Pr(>|t|)  
(Intercept)        4.579e-02  1.107e-01 1.797e+02   0.414    0.680  
Drug1              5.518e-02  2.987e-02 9.004e+01   1.847    0.068 .
Caudate_ki.c       2.057e-02  7.887e-02 9.004e+01   0.261    0.795  
Session            5.515e-03  4.052e-02 9.755e+01   0.136    0.892  
Drug1:Caudate_ki.c 4.754e-02  2.999e-02 9.002e+01   1.585    0.116  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
plot_model(MPH_Caudate_AUT, type = "pred", terms = c("Caudate_ki.c","Session","Drug"))

plot(MPH_Caudate_AUT)

qqnorm(residuals(MPH_Caudate_AUT))


# MPH*Putamen interaction in predicting divergent AUT
MPH_Putamen_AUT <- lmer(AUT_divergent ~ 1 + Drug*Putamen_ki.c + Session + (1 | ID), data = df_MPH, REML=F)
print(summary(MPH_Putamen_AUT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AUT_divergent ~ 1 + Drug * Putamen_ki.c + Session + (1 | ID)
   Data: df_MPH

     AIC      BIC   logLik deviance df.resid 
   370.7    393.1   -178.4    356.7      173 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.9656 -0.5025 -0.0477  0.6113  2.2598 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.4712   0.6864  
 Residual             0.1633   0.4041  
Number of obs: 180, groups:  ID, 90

Fixed effects:
                    Estimate Std. Error        df t value Pr(>|t|)  
(Intercept)        5.033e-02  1.122e-01 1.799e+02   0.449   0.6541  
Drug1              5.535e-02  3.027e-02 9.005e+01   1.829   0.0707 .
Putamen_ki.c       3.139e-02  7.883e-02 9.003e+01   0.398   0.6914  
Session            3.157e-03  4.162e-02 9.800e+01   0.076   0.9397  
Drug1:Putamen_ki.c 1.148e-02  3.082e-02 9.023e+01   0.372   0.7105  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
plot_model(MPH_Putamen_AUT, type = "pred", terms = c("Putamen_ki.c","Session","Drug"))

plot(MPH_Putamen_AUT)

qqnorm(residuals(MPH_Putamen_AUT))


# MPH*VS interaction in predicting divergent AUT
MPH_VS_AUT <- lmer(AUT_divergent ~ 1 + Drug*VS_ki.c + Session + (1 | ID), data = df_MPH, REML=F)
print(summary(MPH_VS_AUT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AUT_divergent ~ 1 + Drug * VS_ki.c + Session + (1 | ID)
   Data: df_MPH

     AIC      BIC   logLik deviance df.resid 
   367.1    389.4   -176.5    353.1      173 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.0657 -0.4976 -0.0212  0.4985  2.2960 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.4719   0.6870  
 Residual             0.1574   0.3967  
Number of obs: 180, groups:  ID, 90

Fixed effects:
               Estimate Std. Error        df t value Pr(>|t|)  
(Intercept)     0.02800    0.11102 179.79119   0.252   0.8012  
Drug1           0.05451    0.02972  90.04447   1.835   0.0699 .
VS_ki.c         0.06058    0.07869  90.11340   0.770   0.4434  
Session         0.01474    0.04087  97.64910   0.361   0.7191  
Drug1:VS_ki.c   0.05614    0.03023  90.21370   1.857   0.0666 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
plot_model(MPH_VS_AUT, type = "pred", terms = c("VS_ki.c","Session","Drug"))

plot(MPH_VS_AUT)

qqnorm(residuals(MPH_VS_AUT))

print(summary(MPH_VS_PastDif), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: DifferentEnd ~ 1 + Drug * VS_ki.c + Session + (1 | ID)
   Data: df_MPH

     AIC      BIC   logLik deviance df.resid 
   884.6    907.0   -435.3    870.6      173 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.92989 -0.56982  0.01076  0.51494  2.57408 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 4.248    2.061   
 Residual             4.269    2.066   
Number of obs: 180, groups:  ID, 90

Fixed effects:
               Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)     8.18896    0.48011 168.67778  17.056   <2e-16 ***
Drug1           0.21825    0.15472  90.06895   1.411    0.162    
VS_ki.c        -0.05445    0.26803  90.21373  -0.203    0.839    
Session        -0.17583    0.20723 107.73944  -0.848    0.398    
Drug1:VS_ki.c   0.27050    0.15733  90.42631   1.719    0.089 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Session1 <- dataAll[grep("1", dataAll$Session),]

ggscatter(Session1, x = "Caudate_ki", y = "KDOCStotal",
          add = "reg.line", conf.int = TRUE,
          cor.coef = TRUE, cor.method = "pearson",
          xlab = "CaudateKi)", ylab = "SubjectiveCreativity")


ggscatter(Session1, x = "Putamen_ki", y = "KDOCStotal",
          add = "reg.line", conf.int = TRUE,
          cor.coef = TRUE, cor.method = "pearson",
          xlab = "CaudateKi)", ylab = "SubjectiveCreativity")


ggscatter(Session1, x = "VS_ki", y = "KDOCStotal",
          add = "reg.line", conf.int = TRUE,
          cor.coef = TRUE, cor.method = "pearson",
          xlab = "CaudateKi)", ylab = "SubjectiveCreativity")

NA
NA
# Ecological validity

ConCr <- lmer(Convergent_Pasta ~ 1 + KDOCStotal + Session + (1 | ID), data = dataAll, REML=F) 
print(summary(ConCr), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_Pasta ~ 1 + KDOCStotal + Session + (1 | ID)
   Data: dataAll

     AIC      BIC   logLik deviance df.resid 
  2064.6   2082.6  -1027.3   2054.6      265 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.3462 -0.4448 -0.0436  0.4098  5.6155 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 176.73   13.29   
 Residual              53.15    7.29   
Number of obs: 270, groups:  ID, 90

Fixed effects:
            Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)  22.1557    10.1823  92.0799   2.176   0.0321 *  
KDOCStotal   -1.5530     3.3546  90.0000  -0.463   0.6445    
Session       2.6667     0.5434 180.0000   4.908 2.06e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
DivArt <- lmer(Divergent_Pasta ~ 1 + KDOCStotal + Session + (1 | ID), data = dataAll, REML=F) 
print(summary(DivArt), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Divergent_Pasta ~ 1 + KDOCStotal + Session + (1 | ID)
   Data: dataAll

     AIC      BIC   logLik deviance df.resid 
  1791.9   1809.9   -891.0   1781.9      265 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.1612 -0.5627 -0.1337  0.4537  3.4865 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 31.93    5.650   
 Residual             25.62    5.061   
Number of obs: 270, groups:  ID, 90

Fixed effects:
            Estimate Std. Error       df t value Pr(>|t|)   
(Intercept)  -3.9329     4.6797  94.8342  -0.840  0.40279   
KDOCStotal    5.1473     1.5303  90.0000   3.364  0.00113 **
Session      -0.5389     0.3772 180.0000  -1.428  0.15489   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
DifEnd <- lmer(DifferentEnd ~ 1 + KDOCStotal + Session + (1 | ID), data = dataAll, REML=F) 
print(summary(DifEnd), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: DifferentEnd ~ 1 + KDOCStotal + Session + (1 | ID)
   Data: dataAll

     AIC      BIC   logLik deviance df.resid 
  1303.5   1321.5   -646.7   1293.5      265 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.20137 -0.60390 -0.02339  0.60521  2.70988 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 3.185    1.785   
 Residual             4.918    2.218   
Number of obs: 270, groups:  ID, 90

Fixed effects:
            Estimate Std. Error       df t value Pr(>|t|)   
(Intercept)   3.6550     1.6286  97.8120   2.244   0.0271 * 
KDOCStotal    1.5358     0.5284  90.0000   2.906   0.0046 **
Session      -0.2278     0.1653 180.0000  -1.378   0.1699   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
ConCr <- lmer(Convergent_RAT ~ 1 + KDOCStotal + Session + (1 | ID), data = dataAll, REML=F) 
print(summary(ConCr), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_RAT ~ 1 + KDOCStotal + Session + (1 | ID)
   Data: dataAll

     AIC      BIC   logLik deviance df.resid 
  1025.2   1043.2   -507.6   1015.2      265 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.41132 -0.54539  0.01383  0.59204  2.58679 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.3869   0.622   
 Residual             2.1815   1.477   
Number of obs: 270, groups:  ID, 90

Fixed effects:
             Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)   4.36595    0.79732 105.11399   5.476 2.99e-07 ***
KDOCStotal    0.09079    0.25392  90.00000   0.358    0.722    
Session       0.16111    0.11009 180.00000   1.463    0.145    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
ConCr <- lmer(AUT_divergent ~ 1 + KDOCStotal + Session + (1 | ID), data = dataAll, REML=F) 
print(summary(ConCr), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AUT_divergent ~ 1 + KDOCStotal + Session + (1 | ID)
   Data: dataAll

     AIC      BIC   logLik deviance df.resid 
   494.3    512.3   -242.2    484.3      265 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.25337 -0.50593 -0.04141  0.52584  2.91320 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.3856   0.621   
 Residual             0.1806   0.425   
Number of obs: 270, groups:  ID, 90

Fixed effects:
              Estimate Std. Error         df t value Pr(>|t|)   
(Intercept)  -1.391632   0.488905  93.086240  -2.846  0.00544 **
KDOCStotal    0.468811   0.160632  89.999988   2.919  0.00444 **
Session       0.001846   0.031674 180.000003   0.058  0.95360   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

## criterion validity

ConDivPasta <- lmer(Convergent_Pasta ~ 1 + Divergent_Pasta + Session + (1 | ID), data = dataAll, REML=F) 
print(summary(ConDivPasta), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_Pasta ~ 1 + Divergent_Pasta + Session + (1 | ID)
   Data: dataAll

     AIC      BIC   logLik deviance df.resid 
  2033.7   2051.7  -1011.9   2023.7      265 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.1062 -0.4322 -0.0288  0.3897  5.1241 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 174.96   13.23   
 Residual              45.29    6.73   
Number of obs: 270, groups:  ID, 90

Fixed effects:
                 Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)      23.48101    2.04408 222.87401  11.487  < 2e-16 ***
Divergent_Pasta  -0.52133    0.09003 242.49652  -5.791 2.16e-08 ***
Session           2.38573    0.50394 180.39468   4.734 4.43e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
ConDifPasta <- lmer(Convergent_Pasta ~ 1 + DifferentEnd + Session + (1 | ID), data = dataAll, REML=F) 
print(summary(ConDifPasta), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_Pasta ~ 1 + DifferentEnd + Session + (1 | ID)
   Data: dataAll

     AIC      BIC   logLik deviance df.resid 
  2047.3   2065.3  -1018.7   2037.3      265 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-3.3542 -0.4773 -0.0304  0.4272  5.5473 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 163.85   12.80   
 Residual              50.12    7.08   
Number of obs: 270, groups:  ID, 90

Fixed effects:
             Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)   25.2852     2.5429 267.6428   9.944  < 2e-16 ***
DifferentEnd  -0.9425     0.2220 227.1239  -4.246 3.18e-05 ***
Session        2.4520     0.5301 179.7783   4.626 7.12e-06 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
## construct validity


ConDifRAT <- lmer(Convergent_RAT ~ 1 + DifferentEnd + Session + (1 | ID), data = dataAll, REML=F) 
print(summary(ConDifRAT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_RAT ~ 1 + DifferentEnd + Session + (1 | ID)
   Data: dataAll

     AIC      BIC   logLik deviance df.resid 
  1017.1   1035.1   -503.6   1007.1      265 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.59175 -0.55540 -0.00063  0.60047  2.57462 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.3507   0.5922  
 Residual             2.1353   1.4613  
Number of obs: 270, groups:  ID, 90

Fixed effects:
              Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)    5.45017    0.37158 267.19265  14.668  < 2e-16 ***
DifferentEnd  -0.09867    0.03407 233.80181  -2.896  0.00413 ** 
Session        0.13864    0.10919 180.94311   1.270  0.20585    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
ConPastaRAT <- lmer(Convergent_RAT ~ 1 + Convergent_Pasta + Session + (1 | ID), data = dataAll, REML=F) 
print(summary(ConPastaRAT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_RAT ~ 1 + Convergent_Pasta + Session + (1 | ID)
   Data: dataAll

     AIC      BIC   logLik deviance df.resid 
  1022.2   1040.2   -506.1   1012.2      265 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.39512 -0.55240 -0.00362  0.58350  2.69559 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.3728   0.6106  
 Residual             2.1641   1.4711  
Number of obs: 270, groups:  ID, 90

Fixed effects:
                  Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)      4.418e+00  2.743e-01 2.697e+02  16.104   <2e-16 ***
Convergent_Pasta 1.252e-02  6.992e-03 1.410e+02   1.790   0.0755 .  
Session          1.277e-01  1.112e-01 1.879e+02   1.148   0.2523    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
DivPastaAUT <- lmer(AUT_divergent ~ 1 + Divergent_Pasta + Session + (1 | ID), data = dataAll, REML=F) 
print(summary(DivPastaAUT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AUT_divergent ~ 1 + Divergent_Pasta + Session + (1 | ID)
   Data: dataAll

     AIC      BIC   logLik deviance df.resid 
   487.9    505.9   -239.0    477.9      265 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.19854 -0.50547 -0.08302  0.51198  2.71362 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.4273   0.6537  
 Residual             0.1674   0.4092  
Number of obs: 270, groups:  ID, 90

Fixed effects:
                  Estimate Std. Error         df t value Pr(>|t|)    
(Intercept)      -0.225507   0.112783 243.280533  -1.999 0.046668 *  
Divergent_Pasta   0.020438   0.005269 258.820938   3.879 0.000133 ***
Session           0.012859   0.030631 180.499758   0.420 0.675125    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
DifPastaAUT <- lmer(AUT_divergent ~ 1 + DifferentEnd + Session + (1 | ID), data = dataAll, REML=F) 
print(summary(DifPastaAUT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: AUT_divergent ~ 1 + DifferentEnd + Session + (1 | ID)
   Data: dataAll

     AIC      BIC   logLik deviance df.resid 
   500.1    518.1   -245.1    490.1      265 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.17369 -0.49164 -0.04547  0.50380  2.86086 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.4273   0.6537  
 Residual             0.1785   0.4225  
Number of obs: 270, groups:  ID, 90

Fixed effects:
               Estimate Std. Error         df t value Pr(>|t|)
(Intercept)   -0.156433   0.144270 269.655448  -1.084    0.279
DifferentEnd   0.019982   0.012979 239.260058   1.540    0.125
Session        0.006397   0.031626 180.512518   0.202    0.840
ConDivRATAUT <- lmer(Convergent_RAT ~ 1 + AUT_divergent + Session + (1 | ID), data = dataAll, REML=F) 
print(summary(ConDivRATAUT), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: Convergent_RAT ~ 1 + AUT_divergent + Session + (1 | ID)
   Data: dataAll

     AIC      BIC   logLik deviance df.resid 
  1022.4   1040.4   -506.2   1012.4      265 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.3473 -0.5412  0.0284  0.5366  2.5965 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.3973   0.6303  
 Residual             2.1485   1.4658  
Number of obs: 270, groups:  ID, 90

Fixed effects:
              Estimate Std. Error       df t value Pr(>|t|)    
(Intercept)     4.6351     0.2452 251.4018  18.904   <2e-16 ***
AUT_divergent   0.2317     0.1354 159.7671   1.712   0.0888 .  
Session         0.1607     0.1093 179.3515   1.471   0.1431    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
if (!require(remotes)) {
    install.packages("remotes")
}
Loading required package: remotes
remotes::install_github('jorvlan/raincloudplots')
Downloading GitHub repo jorvlan/raincloudplots@HEAD
These packages have more recent versions available.
It is recommended to update all of them.
Which would you like to update?

 1: All                               
 2: CRAN packages only                
 3: None                              
 4: cli        (3.4.1 -> 3.6.0) [CRAN]
 5: utf8       (1.2.2 -> 1.2.3) [CRAN]
 6: fansi      (1.0.3 -> 1.0.4) [CRAN]
 7: colorspace (2.0-3 -> 2.1-0) [CRAN]
 8: isoband    (0.2.6 -> 0.2.7) [CRAN]
 9: ggplot2    (3.4.0 -> 3.4.1) [CRAN]
10: gghalves   (0.1.3 -> 0.1.4) [CRAN]
1
cli        (3.4.1 -> 3.6.0) [CRAN]
utf8       (1.2.2 -> 1.2.3) [CRAN]
fansi      (1.0.3 -> 1.0.4) [CRAN]
colorspace (2.0-3 -> 2.1-0) [CRAN]
isoband    (0.2.6 -> 0.2.7) [CRAN]
ggplot2    (3.4.0 -> 3.4.1) [CRAN]
gghalves   (0.1.3 -> 0.1.4) [CRAN]
Installing 7 packages: cli, utf8, fansi, colorspace, isoband, ggplot2, gghalves
trying URL 'https://cran.rstudio.com/bin/macosx/contrib/4.2/cli_3.6.0.tgz'
Content type 'application/x-gzip' length 1329603 bytes (1.3 MB)
==================================================
downloaded 1.3 MB

trying URL 'https://cran.rstudio.com/bin/macosx/contrib/4.2/utf8_1.2.3.tgz'
Content type 'application/x-gzip' length 196823 bytes (192 KB)
==================================================
downloaded 192 KB

trying URL 'https://cran.rstudio.com/bin/macosx/contrib/4.2/fansi_1.0.4.tgz'
Content type 'application/x-gzip' length 364195 bytes (355 KB)
==================================================
downloaded 355 KB

trying URL 'https://cran.rstudio.com/bin/macosx/contrib/4.2/colorspace_2.1-0.tgz'
Content type 'application/x-gzip' length 2621598 bytes (2.5 MB)
==================================================
downloaded 2.5 MB

trying URL 'https://cran.rstudio.com/bin/macosx/contrib/4.2/isoband_0.2.7.tgz'
Content type 'application/x-gzip' length 1869775 bytes (1.8 MB)
==================================================
downloaded 1.8 MB

trying URL 'https://cran.rstudio.com/bin/macosx/contrib/4.2/ggplot2_3.4.1.tgz'
Content type 'application/x-gzip' length 4222110 bytes (4.0 MB)
==================================================
downloaded 4.0 MB

trying URL 'https://cran.rstudio.com/bin/macosx/contrib/4.2/gghalves_0.1.4.tgz'
Content type 'application/x-gzip' length 230947 bytes (225 KB)
==================================================
downloaded 225 KB

The downloaded binary packages are in
    /var/folders/q1/3b7vx_bx4cx1q8w19vj870ym0000gp/T//RtmpC4vn3s/downloaded_packages
── R CMD build ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
  
   checking for file ‘/private/var/folders/q1/3b7vx_bx4cx1q8w19vj870ym0000gp/T/RtmpC4vn3s/remotesb824b759ab/jorvlan-raincloudplots-e5530fc/DESCRIPTION’ ...
  
✔  checking for file ‘/private/var/folders/q1/3b7vx_bx4cx1q8w19vj870ym0000gp/T/RtmpC4vn3s/remotesb824b759ab/jorvlan-raincloudplots-e5530fc/DESCRIPTION’ (435ms)

  
─  preparing ‘raincloudplots’:

  
✔  checking DESCRIPTION meta-information

  
─  checking for LF line-endings in source and make files and shell scripts

  
─  checking for empty or unneeded directories
   Omitted ‘LazyData’ from DESCRIPTION
─  building ‘raincloudplots_0.2.0.tar.gz’

  
   
* installing *source* package ‘raincloudplots’ ...
** using staged installation
** R
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded from temporary location
** testing if installed package can be loaded from final location
** testing if installed package keeps a record of temporary installation path
* DONE (raincloudplots)
library(raincloudplots)


dataSkipped <- lmer(SkippedItems ~ 1 + Session + (1 | subject), data = dataSkippedRAT, REML=F)
print(summary(dataSkipped), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood . t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: SkippedItems ~ 1 + Session + (1 | subject)
   Data: dataSkippedRAT

     AIC      BIC   logLik deviance df.resid 
  1063.9   1078.6   -528.0   1055.9      284 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.0238 -0.5618 -0.2190  0.3190  5.7249 

Random effects:
 Groups   Name        Variance Std.Dev.
 subject  (Intercept) 0.5212   0.722   
 Residual             1.8702   1.368   
Number of obs: 288, groups:  subject, 96

Fixed effects:
             Estimate Std. Error        df t value Pr(>|t|)    
(Intercept)   1.05903    0.22558 275.82981   4.695 4.21e-06 ***
Session       0.03646    0.09869 192.00000   0.369    0.712    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


M = cor(newdata,use="pairwise.complete.obs")
testRes = cor.mtest(newdata, conf.level = 0.95)
corrplot(M, method = 'number') # colorful number
## leave blank on non-significant coefficient
## add significant correlation coefficients
corrplot(M, p.mat = testRes$p, method = 'circle', type = 'lower', insig='blank',
         addCoef.col ='black', number.cex = 0.8, diag=FALSE)


M = cor(Avdata,use="pairwise.complete.obs")
testRes = cor.mtest(Avdata, conf.level = 0.95)
corrplot(M, method = 'number') # colorful number

## leave blank on non-significant coefficient
## add significant correlation coefficients
corrplot(M, p.mat = testRes$p, method = 'circle', type = 'lower', insig='blank',
         addCoef.col ='black', number.cex = 0.8, diag=FALSE)


data_MPH <- dplyr::filter(dataAll, Drug %in% c("MPH"))  
data_MPH <- data_MPH[order(data_MPH$ID),]
data_SUL <- dplyr::filter(dataAll, Drug %in% c("SUL"))
data_SUL <- data_SUL[order(data_SUL$ID),]
data_PBO <- dplyr::filter(dataAll, Drug %in% c("PBO"))
data_PBO <- data_PBO[order(data_PBO$ID),]


df_Correlations <- data.frame(matrix(ncol = 8, nrow = 93))
x <- c("ID", "MPH_PBO_Redo_Av", "MPH_PBO_IP_Av","MPH_PBO_AUT_divergent","MPH_PBO_Divergent_Pasta","MPH_PBO_DifferentEnd","MPH_PBO_Convergent_RAT","MPH_PBO_Convergent_PASTA")
colnames(df_Correlations) <- x

df_Correlations$ID <- data_MPH$ID
Error in `$<-.data.frame`(`*tmp*`, ID, value = c(1L, 2L, 3L, 4L, 5L, 6L,  : 
  replacement has 90 rows, data has 93
# Total number of ideas in PASTA
MPH_Caudate_Total <- lmer(Total ~ 1 + Drug*Caudate_ki.c + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_Caudate_Total), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood  ['lmerMod']
Formula: Total ~ 1 + Drug * Caudate_ki.c + Session + (1 | ID)
   Data: df_MPH

     AIC      BIC   logLik deviance df.resid 
  1428.8   1451.2   -707.4   1414.8      173 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.7057 -0.4753 -0.0043  0.3759  3.5178 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 176.4    13.281  
 Residual              56.3     7.504  
Number of obs: 180, groups:  ID, 90

Fixed effects:
                   Estimate Std. Error t value
(Intercept)         30.4527     2.1064  14.457
Drug1                1.3418     0.5620   2.388
Caudate_ki.c        -0.4490     1.5163  -0.296
Session              1.5750     0.7631   2.064
Drug1:Caudate_ki.c   0.9871     0.5643   1.749
MPH_Putamen_Total <- lmer(Total ~ 1 + Drug*Putamen_ki.c + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_Putamen_Total), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood  ['lmerMod']
Formula: Total ~ 1 + Drug * Putamen_ki.c + Session + (1 | ID)
   Data: df_MPH

     AIC      BIC   logLik deviance df.resid 
  1431.6   1453.9   -708.8   1417.6      173 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.7177 -0.4466  0.0032  0.3182  3.5506 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 175.69   13.255  
 Residual              57.99    7.615  
Number of obs: 180, groups:  ID, 90

Fixed effects:
                   Estimate Std. Error t value
(Intercept)         30.4948     2.1366  14.273
Drug1                1.3434     0.5704   2.355
Putamen_ki.c        -0.1509     1.5168  -0.099
Session              1.5532     0.7851   1.978
Drug1:Putamen_ki.c   0.3515     0.5808   0.605
MPH_VS_Total <- lmer(Total ~ 1 + Drug*VS_ki + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_VS_Total), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood  ['lmerMod']
Formula: Total ~ 1 + Drug * VS_ki + Session + (1 | ID)
   Data: df_MPH

     AIC      BIC   logLik deviance df.resid 
  1427.1   1449.4   -706.5   1413.1      173 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.7614 -0.4458 -0.0326  0.3456  3.6077 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 173.78   13.183  
 Residual              55.97    7.482  
Number of obs: 180, groups:  ID, 90

Fixed effects:
            Estimate Std. Error t value
(Intercept)  16.5193    11.5621   1.429
Drug1        -6.7121     4.3339  -1.549
VS_ki       933.6037   778.5386   1.199
Session       1.7573     0.7712   2.279
Drug1:VS_ki 552.7085   294.7144   1.875
## Convergent PASTA corrected for Total number of ideas
MPH_Caudate_ConTotal <- lmer(Con_Total ~ 1 + Drug*Caudate_ki.c + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_Caudate_ConTotal), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood  ['lmerMod']
Formula: Con_Total ~ 1 + Drug * Caudate_ki.c + Session + (1 | ID)
   Data: df_MPH

     AIC      BIC   logLik deviance df.resid 
   -49.1    -26.8     31.6    -63.1      173 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.0418 -0.5060  0.1013  0.5229  2.1592 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.03552  0.1885  
 Residual             0.01890  0.1375  
Number of obs: 180, groups:  ID, 90

Fixed effects:
                    Estimate Std. Error t value
(Intercept)         0.596737   0.034807  17.144
Drug1              -0.011848   0.010295  -1.151
Caudate_ki.c        0.013756   0.022486   0.612
Session             0.033278   0.013840   2.405
Drug1:Caudate_ki.c  0.006939   0.010337   0.671
MPH_Putamen_ConTotal <- lmer(Con_Total ~ 1 + Drug*Putamen_ki.c + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_Putamen_ConTotal), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood  ['lmerMod']
Formula: Con_Total ~ 1 + Drug * Putamen_ki.c + Session + (1 | ID)
   Data: df_MPH

     AIC      BIC   logLik deviance df.resid 
   -48.6    -26.3     31.3    -62.6      173 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.05005 -0.47652  0.08736  0.53785  2.16547 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.03556  0.1886  
 Residual             0.01898  0.1378  
Number of obs: 180, groups:  ID, 90

Fixed effects:
                   Estimate Std. Error t value
(Intercept)         0.59940    0.03515  17.054
Drug1              -0.01175    0.01032  -1.139
Putamen_ki.c        0.01111    0.02250   0.494
Session             0.03190    0.01406   2.268
Drug1:Putamen_ki.c -0.00240    0.01050  -0.228
MPH_VS_ConTotal <- lmer(Con_Total ~ 1 + Drug*VS_ki + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_VS_ConTotal), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood  ['lmerMod']
Formula: Con_Total ~ 1 + Drug * VS_ki + Session + (1 | ID)
   Data: df_MPH

     AIC      BIC   logLik deviance df.resid 
   -49.7    -27.3     31.8    -63.7      173 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.06560 -0.50547  0.09341  0.53784  2.18044 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.03536  0.1880  
 Residual             0.01886  0.1373  
Number of obs: 180, groups:  ID, 90

Fixed effects:
            Estimate Std. Error t value
(Intercept)  0.44927    0.17328   2.593
Drug1       -0.07556    0.07952  -0.950
VS_ki        9.94044   11.60113   0.857
Session      0.03476    0.01401   2.481
Drug1:VS_ki  4.37213    5.40786   0.808
## Divergent PASTA corrected for Total number of ideas
MPH_Caudate_DivTotal <- lmer(Div_Total ~ 1 + Drug*Caudate_ki.c + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_Caudate_DivTotal), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood  ['lmerMod']
Formula: Div_Total ~ 1 + Drug * Caudate_ki.c + Session + (1 | ID)
   Data: df_MPH

     AIC      BIC   logLik deviance df.resid 
   -49.0    -26.6     31.5    -63.0      173 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.1579 -0.5219 -0.1046  0.5056  2.0404 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.03551  0.1884  
 Residual             0.01893  0.1376  
Number of obs: 180, groups:  ID, 90

Fixed effects:
                   Estimate Std. Error t value
(Intercept)         0.40375    0.03482  11.594
Drug1               0.01191    0.01030   1.156
Caudate_ki.c       -0.01377    0.02249  -0.612
Session            -0.03339    0.01385  -2.410
Drug1:Caudate_ki.c -0.00700    0.01035  -0.677
MPH_Putamen_DivTotal <- lmer(Div_Total ~ 1 + Drug*Putamen_ki.c + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_Putamen_DivTotal), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood  ['lmerMod']
Formula: Div_Total ~ 1 + Drug * Putamen_ki.c + Session + (1 | ID)
   Data: df_MPH

     AIC      BIC   logLik deviance df.resid 
   -48.4    -26.1     31.2    -62.4      173 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-2.1643 -0.5388 -0.0868  0.4772  2.0479 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.03554  0.1885  
 Residual             0.01901  0.1379  
Number of obs: 180, groups:  ID, 90

Fixed effects:
                    Estimate Std. Error t value
(Intercept)         0.401089   0.035166  11.406
Drug1               0.011812   0.010327   1.144
Putamen_ki.c       -0.011061   0.022503  -0.492
Session            -0.032006   0.014074  -2.274
Drug1:Putamen_ki.c  0.002371   0.010513   0.226
MPH_VS_DivTotal <- lmer(Div_Total ~ 1 + Drug*VS_ki + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_VS_DivTotal), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood  ['lmerMod']
Formula: Div_Total ~ 1 + Drug * VS_ki + Session + (1 | ID)
   Data: df_MPH

     AIC      BIC   logLik deviance df.resid 
   -49.5    -27.2     31.8    -63.5      173 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.17925 -0.53855 -0.09489  0.50574  2.06365 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.03534  0.1880  
 Residual             0.01889  0.1375  
Number of obs: 180, groups:  ID, 90

Fixed effects:
            Estimate Std. Error t value
(Intercept)  0.55136    0.17328   3.182
Drug1        0.07569    0.07960   0.951
VS_ki       -9.95034   11.60081  -0.858
Session     -0.03487    0.01402  -2.486
Drug1:VS_ki -4.37706    5.41288  -0.809
## Different ending PASTA corrected for Total number of ideas
MPH_Caudate_DifEndTotal <- lmer(DifEnd_Total ~ 1 + Drug*Caudate_ki.c + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_Caudate_DifEndTotal), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood  ['lmerMod']
Formula: DifEnd_Total ~ 1 + Drug * Caudate_ki.c + Session + (1 | ID)
   Data: df_MPH

     AIC      BIC   logLik deviance df.resid 
  -206.3   -183.9    110.1   -220.3      173 

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-1.6374 -0.5502 -0.0632  0.4053  2.5076 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.01609  0.12683 
 Residual             0.00748  0.08648 
Number of obs: 180, groups:  ID, 90

Fixed effects:
                    Estimate Std. Error t value
(Intercept)         0.318047   0.022444  14.171
Drug1              -0.008224   0.006477  -1.270
Caudate_ki.c        0.003667   0.014929   0.246
Session            -0.018966   0.008733  -2.172
Drug1:Caudate_ki.c  0.001022   0.006503   0.157
MPH_Putamen_DifEndTotal <- lmer(DifEnd_Total ~ 1 + Drug*Putamen_ki.c + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_Putamen_DifEndTotal), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood  ['lmerMod']
Formula: DifEnd_Total ~ 1 + Drug * Putamen_ki.c + Session + (1 | ID)
   Data: df_MPH

     AIC      BIC   logLik deviance df.resid 
  -209.1   -186.7    111.5   -223.1      173 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.68184 -0.56604 -0.04624  0.34020  2.48106 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.016166 0.1271  
 Residual             0.007259 0.0852  
Number of obs: 180, groups:  ID, 90

Fixed effects:
                    Estimate Std. Error t value
(Intercept)         0.313340   0.022434  13.967
Drug1              -0.008400   0.006382  -1.316
Putamen_ki.c       -0.005445   0.014917  -0.365
Session            -0.016524   0.008731  -1.893
Drug1:Putamen_ki.c  0.010897   0.006497   1.677
MPH_VS_DifEndTotal <- lmer(DifEnd_Total ~ 1 + Drug*VS_ki + Session + (1 | ID), data = df_MPH,REML=F)
print(summary(MPH_VS_DifEndTotal), corr=F) # print summary without fixed effect correlation matrix
Linear mixed model fit by maximum likelihood  ['lmerMod']
Formula: DifEnd_Total ~ 1 + Drug * VS_ki + Session + (1 | ID)
   Data: df_MPH

     AIC      BIC   logLik deviance df.resid 
  -207.7   -185.4    110.9   -221.7      173 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-1.61885 -0.52688 -0.04225  0.40725  2.41080 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 0.015845 0.12588 
 Residual             0.007456 0.08635 
Number of obs: 180, groups:  ID, 90

Fixed effects:
             Estimate Std. Error t value
(Intercept)  0.439868   0.114367   3.846
Drug1       -0.035845   0.050007  -0.717
VS_ki       -8.430435   7.669035  -1.099
Session     -0.018539   0.008835  -2.098
Drug1:VS_ki  1.896520   3.400667   0.558
bic_bf10(SUL2_bic,SUL1_bic) # null comes first, the results are for the null
[1] 0.1925223
bic_bf10(SUL3_bic,SUL1_bic) # convert BICs to BF
[1] 0.01479896
bic_bf10(SUL3_bic,SUL2_bic) # convert BICs to BF
[1] 0.07686883
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKCgpgYGB7cn0Kcm0obGlzdD1scygpKSAjIHJlbW92ZXMgYWxsIHZhcmlhYmxlcyBmcm9tIHRoZSB3b3Jrc3BhY2UgOikKCiMgZGF0YSBzY2FsZWQgdXNpbmcgb25seSBzZXNzaW9uIDEgZGF0YSBiZWxvdwpkYXRhMSA8LSByZWFkLmNzdignfi9Ecm9wYm94L0RDQ04vQ3JlYXRpdml0eS9DcmVhdGl2aXR5U2Vzc2lvbjFfVXBkYXRlZC5jc3YnKQpkYXRhMSRQdXRhbWVuX2tpLmMgPC0gc2NhbGUoZGF0YTEkUHV0YW1lbl9raSkgI2RhdGFBbGwkUHV0YW1lbl9raSAtIG1lYW4oZGF0YUFsbCRQdXRhbWVuX2tpKQpkYXRhMSRDYXVkYXRlX2tpLmMgPC0gc2NhbGUoZGF0YTEkQ2F1ZGF0ZV9raSkgI2RhdGFBbGwkQ2F1ZGF0ZV9raSAtIG1lYW4oZGF0YUFsbCRDYXVkYXRlX2tpKQpkYXRhMSRWU19raS5jIDwtIHNjYWxlKGRhdGExJFZTX2tpKSAjZGF0YUFsbCRWU19raSAtIG1lYW4oZGF0YUFsbCRWU19raSkKd3JpdGUuY3N2KGRhdGExLCJ+L0Ryb3Bib3gvRENDTi9DcmVhdGl2aXR5L0NyZWF0aXZpdHlTZXNzaW9uMV8yLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQpRSW5mbyA8LSBxdWFudGlsZShkYXRhMSRQdXRhbWVuX2tpLmMsIHByb2I9YyguMjAsLjUsLjgwKSkKCmRhdGFOZXcgPC0gZGF0YTEgJT4lIG11dGF0ZShQdXRhbWVuUXVhcnRpbGUgPQogICAgICAgICAgICAgICAgICAgICBjYXNlX3doZW4oUHV0YW1lbl9raS5jIDw9IFFJbmZvWzFdIH4gIjEiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1dGFtZW5fa2kuYyA+PSBRSW5mb1szXSB+ICIyIikKKQoKd3JpdGUuY3N2KGRhdGFOZXcsIn4vRHJvcGJveC9EQ0NOL0NyZWF0aXZpdHkvQ3JlYXRpdml0eV9zZXNzaW9uMV9RdWFydGlsZWQuY3N2Iiwgcm93Lm5hbWVzID0gRkFMU0UpCgoKYGBgCgoKYGBge3J9CiMgYW5kIHRoZW4gYWRkZWQgdG8gdGhlIGZvbGxvd2luZyB3b3JrYm9vawpkYXRhQWxsIDwtIHJlYWQuY3N2KCd+L0Ryb3Bib3gvRENDTi9DcmVhdGl2aXR5L0NyZWF0aXZpdHlJRHNoZWV0X01pc3NpbmdEYXRhUmVtb3ZlZF9VcGRhdGVkLmNzdicpCnRhYmxlKGRhdGFBbGwkU2Vzc2lvbiwgZGF0YUFsbCREcnVnKQojIHR1cm4gZHJ1ZyBjb25kaXRpb25zIGludG8gZmFjdG9yIGxldmVscwpkYXRhQWxsJERydWcgPC0gZmFjdG9yKGRhdGFBbGwkRHJ1ZywgbGV2ZWxzID0gYygiTVBIIiwiU1VMIiwiUEJPIikpOwpkYXRhQWxsJFB1dGFtZW5TcGxpdCA8LSBmYWN0b3IoZGF0YUFsbCRQdXRhbWVuU3BsaXQsIGxldmVscyA9IGMoIjAiLCIxIikpOwpkYXRhQWxsJENhdWRhdGVTcGxpdCA8LSBmYWN0b3IoZGF0YUFsbCRDYXVkYXRlU3BsaXQsIGxldmVscyA9IGMoIjAiLCIxIikpOwpkYXRhQWxsJFZTU3BsaXQgPC0gZmFjdG9yKGRhdGFBbGwkVlNTcGxpdCwgbGV2ZWxzID0gYygiMCIsIjEiKSk7CgoKZGF0YUFsbCREaWZFbmRfVG90YWwgPC0gZGF0YUFsbCREaWZmZXJlbnRFbmQvZGF0YUFsbCRUb3RhbCAjIGRpdmlkZSBkaWZmZXJlbnQgZW5kIHNjb3JlcyBieSB0b3RhbCBudW1iZXIgb2YgaWRlYXMKZGF0YUFsbCREaWZFbmRfQ29uIDwtIGRhdGFBbGwkRGlmZmVyZW50RW5kL2RhdGFBbGwkQ29udmVyZ2VudF9QYXN0YSAjIGRpdmlkZSBkaWZmZXJlbnQgZW5kIHNjb3JlcyBieSB0b3RhbCBudW1iZXIgb2YgaWRlYXMKCgojIHNldCBjb250cmFzdHMgdG8gc3VtLXRvLXplcm8Kb3B0aW9ucyhjb250cmFzdHM9YygiY29udHIuc3VtIiwgImNvbnRyLnBvbHkiKSkKCiMgc2V0IHR3byBkYXRhZnJhbWVzIGZvciB0aGUgY29udHJhc3QgYmV0d2VlbiBNUEggYW5kIFBCTyAtIGJldHdlZW4gU1VMIGFuZCBQQk8KZGZfTVBIIDwtIGRwbHlyOjpmaWx0ZXIoZGF0YUFsbCwgRHJ1ZyAlaW4lIGMoIk1QSCIsIlBCTyIpKSAgCmRmX1NVTCA8LSBkcGx5cjo6ZmlsdGVyKGRhdGFBbGwsIERydWcgJWluJSBjKCJTVUwiLCJQQk8iKSkKZGF0YV9QQk8gPC0gZHBseXI6OmZpbHRlcihkYXRhQWxsLCBEcnVnICVpbiUgYygiUEJPIikpCgoKYGBgCmBgYHtyfQoKIyMgUExBQ0VCTwojIGRvZXMgY3JlYXRpdml0eSB2YXJ5IGFsc28gYXMgYSBmdW5jdGlvbiBvZiBpbmRpdmlkdWFsIGRpZmZlcmVuY2VzIGluIGRvcGFtaW5lIHN5bnRoZXNpcyBjYXBhY2l0eSB1bmRlciBiYXNlbGluZSAodW5kZXIgcGxhY2Vibyk/CgpQbGFjZWJvX1JBVF9DYXVkYXRlIDwtIGxtKENvbnZlcmdlbnRfUkFUIH4gMSArIENhdWRhdGVfa2kuYyAsIGRhdGEgPSBkYXRhX1BCTywgUkVNTD1GKQpQbGFjZWJvX1JBVF9WUyA8LSBsbShDb252ZXJnZW50X1JBVCB+IDEgKyBWU19raS5jICwgZGF0YSA9IGRhdGFfUEJPLCBSRU1MPUYpClBsYWNlYm9fUkFUX1B1dGFtZW4gPC0gbG0oQ29udmVyZ2VudF9SQVQgfiAxICsgUHV0YW1lbl9raS5jLCBkYXRhID0gZGF0YV9QQk8sIFJFTUw9RikKClBsYWNlYm9fQVVUX0NhdWRhdGUgPC0gbG0oQVVUX2RpdmVyZ2VudCB+IDEgKyBDYXVkYXRlX2tpLmMgLCBkYXRhID0gZGF0YV9QQk8sIFJFTUw9RikKUGxhY2Vib19BVVRfVlMgPC0gbG0oQVVUX2RpdmVyZ2VudCB+IDEgKyBWU19raS5jICwgZGF0YSA9IGRhdGFfUEJPLCBSRU1MPUYpClBsYWNlYm9fQVVUX1B1dGFtZW4gPC0gbG0oQVVUX2RpdmVyZ2VudCB+IDEgKyBQdXRhbWVuX2tpLmMgLCBkYXRhID0gZGF0YV9QQk8sIFJFTUw9RikKClBsYWNlYm9fUEFTVEFfQ1RfQ2F1ZGF0ZSA8LSBsbShDb252ZXJnZW50X1Bhc3RhIH4gMSArIENhdWRhdGVfa2kuYyAsIGRhdGEgPSBkYXRhX1BCTywgUkVNTD1GKQpQbGFjZWJvX1BBU1RBX0NUX1ZTIDwtIGxtKENvbnZlcmdlbnRfUGFzdGEgfiAxICsgVlNfa2kuYyAsIGRhdGEgPSBkYXRhX1BCTywgUkVNTD1GKQpQbGFjZWJvX1BBU1RBX0NUX1B1dGFtZW4gPC0gbG0oQ29udmVyZ2VudF9QYXN0YSB+IDEgKyBQdXRhbWVuX2tpLmMgLCBkYXRhID0gZGF0YV9QQk8sIFJFTUw9RikKClBsYWNlYm9fUEFTVEFfRFRfQ2F1ZGF0ZSA8LSBsbShEaXZlcmdlbnRfUGFzdGEgfiAxICsgQ2F1ZGF0ZV9raS5jICwgZGF0YSA9IGRhdGFfUEJPLCBSRU1MPUYpClBsYWNlYm9fUEFTVEFfRFRfVlMgPC0gbG0oRGl2ZXJnZW50X1Bhc3RhIH4gMSArIFZTX2tpLmMgLCBkYXRhID0gZGF0YV9QQk8sIFJFTUw9RikKUGxhY2Vib19QQVNUQV9EVF9QdXRhbWVuIDwtIGxtKERpdmVyZ2VudF9QYXN0YSB+IDEgKyBQdXRhbWVuX2tpLmMgLCBkYXRhID0gZGF0YV9QQk8sIFJFTUw9RikKClBsYWNlYm9fUEFTVEFfREVfQ2F1ZGF0ZSA8LSBsbShEaWZmZXJlbnRFbmQgfiAxICsgQ2F1ZGF0ZV9raS5jICwgZGF0YSA9IGRhdGFfUEJPLCBSRU1MPUYpClBsYWNlYm9fUEFTVEFfREVfVlMgPC0gbG0oRGlmZmVyZW50RW5kIH4gMSArIFZTX2tpLmMgLCBkYXRhID0gZGF0YV9QQk8sIFJFTUw9RikKUGxhY2Vib19QQVNUQV9ERV9QdXRhbWVuIDwtIGxtKERpZmZlcmVudEVuZCB+IDEgKyBQdXRhbWVuX2tpLmMgLCBkYXRhID0gZGF0YV9QQk8sIFJFTUw9RikKCgpwcmludChzdW1tYXJ5KFBsYWNlYm9fUkFUX0NhdWRhdGUpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcHJpbnQoc3VtbWFyeShQbGFjZWJvX1JBVF9WUyksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwcmludChzdW1tYXJ5KFBsYWNlYm9fUkFUX1B1dGFtZW4pLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCnByaW50KHN1bW1hcnkoUGxhY2Vib19BVVRfQ2F1ZGF0ZSksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwcmludChzdW1tYXJ5KFBsYWNlYm9fQVVUX1ZTKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CnByaW50KHN1bW1hcnkoUGxhY2Vib19BVVRfUHV0YW1lbiksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKcHJpbnQoc3VtbWFyeShQbGFjZWJvX1BBU1RBX0NUX0NhdWRhdGUpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcHJpbnQoc3VtbWFyeShQbGFjZWJvX1BBU1RBX0NUX1ZTKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CnByaW50KHN1bW1hcnkoUGxhY2Vib19QQVNUQV9DVF9QdXRhbWVuKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CgpwcmludChzdW1tYXJ5KFBsYWNlYm9fUEFTVEFfRFRfQ2F1ZGF0ZSksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwcmludChzdW1tYXJ5KFBsYWNlYm9fUEFTVEFfRFRfVlMpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcHJpbnQoc3VtbWFyeShQbGFjZWJvX1BBU1RBX0RUX1B1dGFtZW4pLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCnByaW50KHN1bW1hcnkoUGxhY2Vib19QQVNUQV9ERV9DYXVkYXRlKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CnByaW50KHN1bW1hcnkoUGxhY2Vib19QQVNUQV9ERV9WUyksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwcmludChzdW1tYXJ5KFBsYWNlYm9fUEFTVEFfREVfUHV0YW1lbiksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKCgpgYGAKCmBgYHtyfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMgU1VMICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBTVUwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFNVTCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMgU1VMICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBTVUwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKYGBgCgoKYGBge3J9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBSQVQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgU3VscGlyaWRlKkNhdWRhdGUgaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBDb252ZXJnZW50IFJBVApTVUxfQ2F1ZGF0ZV9SQVQgPC0gbG1lcihDb252ZXJnZW50X1JBVCB+IDEgKyBEcnVnKkNhdWRhdGVfa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX1NVTCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KFNVTF9DYXVkYXRlX1JBVCksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwbG90X21vZGVsKFNVTF9DYXVkYXRlX1JBVCwgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJDYXVkYXRlX2tpLmMiLCJTZXNzaW9uIiwiRHJ1ZyIpKQpwbG90KFNVTF9DYXVkYXRlX1JBVCkKcXFub3JtKHJlc2lkdWFscyhTVUxfQ2F1ZGF0ZV9SQVQpKQoKCiMgU3VscGlyaWRlKlB1dGFtZW4gaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBDb252ZXJnZW50IFJBVApTVUxfUHV0YW1lbl9SQVQgPC0gbG1lcihDb252ZXJnZW50X1JBVCB+IDEgKyBEcnVnKlB1dGFtZW5fa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX1NVTCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KFNVTF9QdXRhbWVuX1JBVCksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwbG90X21vZGVsKFNVTF9QdXRhbWVuX1JBVCwgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJQdXRhbWVuX2tpLmMiLCJTZXNzaW9uIiwiRHJ1ZyIpKQpwbG90KFNVTF9QdXRhbWVuX1JBVCkKcXFub3JtKHJlc2lkdWFscyhTVUxfUHV0YW1lbl9SQVQpKQoKCiMgU3VscGlyaWRlKlZTIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgQ29udmVyZ2VudCBSQVQKU1VMX1ZTX1JBVCA8LSBsbWVyKENvbnZlcmdlbnRfUkFUIH4gMSArIERydWcqVlNfa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX1NVTCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KFNVTF9WU19SQVQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChTVUxfVlNfUkFULCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIlZTX2tpLmMiLCJTZXNzaW9uIiwiRHJ1ZyIpKQpwbG90KFNVTF9WU19SQVQpCnFxbm9ybShyZXNpZHVhbHMoU1VMX1ZTX1JBVCkpCgoKQ29uMTwtIHNqUGxvdDo6cGxvdF9tb2RlbChTVUxfQ2F1ZGF0ZV9SQVQsIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsIHZsaW5lLmNvbG9yPSdibGFjaycsCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iQ2F1ZGF0ZSBLaSIpIAoKQ29uMiA8LSBzalBsb3Q6OnBsb3RfbW9kZWwoU1VMX1B1dGFtZW5fUkFULCAKICAgICAgICAgICAgICAgICAgIHNob3cudmFsdWVzPVRSVUUsIHNob3cucD1UUlVFLCB2bGluZS5jb2xvcj0nYmxhY2snLAogICAgICAgICAgICAgICAgICAgdGl0bGU9IlB1dGFtZW4gS2kiKSAKCkNvbjMgPC0gc2pQbG90OjpwbG90X21vZGVsKFNVTF9WU19SQVQsIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsIHZsaW5lLmNvbG9yPSdibGFjaycsCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iVlMgS2kiKSAKCmxldmVscyhDb24xJGRhdGEkdGVybSkgPC0gYygiU1VMKktpIiwgIlNlc3Npb24iLCAiS2kiLCAiU1VMIikKbGV2ZWxzKENvbjIkZGF0YSR0ZXJtKSA8LSBjKCJTVUwqS2kiLCAiU2Vzc2lvbiIsICJLaSIsICJTVUwiKQpsZXZlbHMoQ29uMyRkYXRhJHRlcm0pIDwtIGMoIlNVTCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIlNVTCIpCgpiZWhhdnBsb3RDb24gPC0gZ2dhcnJhbmdlKENvbjEsIENvbjIsIENvbjMsICBuY29sID0gMywKICBucm93ID0gMSwgICB3aWR0aHMgPSAxMCwKICBoZWlnaHRzID0gMykKCmFubm90YXRlX2ZpZ3VyZShiZWhhdnBsb3RDb24sIHRvcCA9IHRleHRfZ3JvYigiRWZmZWN0IG9mIFNVTCBvbiBSQVQgY29udmVyZ2VudCB0aGlua2luZyIsIAogICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhY2UgPSAiYm9sZCIsIHNpemUgPSAyMSkpCgpgYGAKCmBgYHtyfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEFVVCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKCiMgU3VscGlyaWRlKkNhdWRhdGUgaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBkaXZlcmdlbnQgQVVUClNVTF9DYXVkYXRlX0FVVCA8LSBsbWVyKEFVVF9kaXZlcmdlbnQgfiAxICsgRHJ1ZypDYXVkYXRlX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9TVUwsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShTVUxfQ2F1ZGF0ZV9BVVQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChTVUxfQ2F1ZGF0ZV9BVVQsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiQ2F1ZGF0ZV9raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChTVUxfQ2F1ZGF0ZV9BVVQpCnFxbm9ybShyZXNpZHVhbHMoU1VMX0NhdWRhdGVfQVVUKSkKCiMgU3VscGlyaWRlKkNhdWRhdGUgaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBkaXZlcmdlbnQgQVVUClNVTF9QdXRhbWVuX0FVVCA8LSBsbWVyKEFVVF9kaXZlcmdlbnQgfiAxICsgRHJ1ZypQdXRhbWVuX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9TVUwsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShTVUxfUHV0YW1lbl9BVVQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChTVUxfUHV0YW1lbl9BVVQsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiUHV0YW1lbl9raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChTVUxfUHV0YW1lbl9BVVQpCnFxbm9ybShyZXNpZHVhbHMoU1VMX1B1dGFtZW5fQVVUKSkKCiMgU3VscGlyaWRlKlZTIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgZGl2ZXJnZW50IEFVVApTVUxfVlNfQVVUIDwtIGxtZXIoQVVUX2RpdmVyZ2VudCB+IDEgKyBEcnVnKlZTX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9TVUwsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShTVUxfVlNfQVVUKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CnBsb3RfbW9kZWwoU1VMX1ZTX0FVVCwgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJWU19raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChTVUxfVlNfQVVUKQpxcW5vcm0ocmVzaWR1YWxzKFNVTF9WU19BVVQpKQoKCkRpdjE8LSBzalBsb3Q6OnBsb3RfbW9kZWwoU1VMX0NhdWRhdGVfQVVULCAKICAgICAgICAgICAgICAgICAgIHNob3cudmFsdWVzPVRSVUUsIHNob3cucD1UUlVFLCB2bGluZS5jb2xvcj0nYmxhY2snLAogICAgICAgICAgICAgICAgICAgdGl0bGU9IkNhdWRhdGUgS2kiKSAKCkRpdjIgPC0gc2pQbG90OjpwbG90X21vZGVsKFNVTF9QdXRhbWVuX0FVVCwgCiAgICAgICAgICAgICAgICAgICBzaG93LnZhbHVlcz1UUlVFLCBzaG93LnA9VFJVRSwgdmxpbmUuY29sb3I9J2JsYWNrJywKICAgICAgICAgICAgICAgICAgIHRpdGxlPSJQdXRhbWVuIEtpIikgCgpEaXYzIDwtIHNqUGxvdDo6cGxvdF9tb2RlbChTVUxfVlNfQVVULCAKICAgICAgICAgICAgICAgICAgIHNob3cudmFsdWVzPVRSVUUsIHNob3cucD1UUlVFLCB2bGluZS5jb2xvcj0nYmxhY2snLAogICAgICAgICAgICAgICAgICAgdGl0bGU9IlZTIEtpIikgCgpsZXZlbHMoRGl2MSRkYXRhJHRlcm0pIDwtIGMoIlNVTCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIlNVTCIpCmxldmVscyhEaXYyJGRhdGEkdGVybSkgPC0gYygiU1VMKktpIiwgIlNlc3Npb24iLCAiS2kiLCAiU1VMIikKbGV2ZWxzKERpdjMkZGF0YSR0ZXJtKSA8LSBjKCJTVUwqS2kiLCAiU2Vzc2lvbiIsICJLaSIsICJTVUwiKQoKYmVoYXZwbG90RGl2IDwtIGdnYXJyYW5nZShEaXYxLCBEaXYyLCBEaXYzLCAgbmNvbCA9IDMsCiAgbnJvdyA9IDEsICAgd2lkdGhzID0gMTAsCiAgaGVpZ2h0cyA9IDMpCgphbm5vdGF0ZV9maWd1cmUoYmVoYXZwbG90RGl2LCB0b3AgPSB0ZXh0X2dyb2IoIkVmZmVjdCBvZiBTVUwgb24gQVVUIGRpdmVyZ2VudCB0aGlua2luZyIsIAogICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhY2UgPSAiYm9sZCIsIHNpemUgPSAyMSkpCmBgYAoKCgpgYGB7cn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFBBU1RBICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBDb252ZXJnZW50ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoKIyBTdWxwaXJpZGUqQ2F1ZGF0ZSBpbnRlcmFjdGlvbiBpbiBwcmVkaWN0aW5nIGNvbnZlcmdlbnQgUGFzdGEKU1VMX0NhdWRhdGVfUGFzdENvbiA8LSBsbWVyKENvbnZlcmdlbnRfUGFzdGEgfiAxICsgRHJ1ZypDYXVkYXRlX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9TVUwsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShTVUxfQ2F1ZGF0ZV9QYXN0Q29uKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CnBsb3RfbW9kZWwoU1VMX0NhdWRhdGVfUGFzdENvbiwgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJDYXVkYXRlX2tpLmMiLCJTZXNzaW9uIiwiRHJ1ZyIpKQpwbG90KFNVTF9DYXVkYXRlX1Bhc3RDb24pCnFxbm9ybShyZXNpZHVhbHMoU1VMX0NhdWRhdGVfUGFzdENvbikpCgojIFN1bHBpcmlkZSpDYXVkYXRlIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgY29udmVyZ2VudCBQYXN0YQpTVUxfUHV0YW1lbl9QYXN0Q29uIDwtIGxtZXIoQ29udmVyZ2VudF9QYXN0YSB+IDEgKyBEcnVnKlB1dGFtZW5fa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX1NVTCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KFNVTF9QdXRhbWVuX1Bhc3RDb24pLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChTVUxfUHV0YW1lbl9QYXN0Q29uLCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIlB1dGFtZW5fa2kuYyIsIlNlc3Npb24iLCJEcnVnIikpCnBsb3QoU1VMX1B1dGFtZW5fUGFzdENvbikKcXFub3JtKHJlc2lkdWFscyhTVUxfUHV0YW1lbl9QYXN0Q29uKSkKCiMgU3VscGlyaWRlKkNhdWRhdGUgaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBjb252ZXJnZW50IFBhc3RhClNVTF9WU19QYXN0Q29uIDwtIGxtZXIoQ29udmVyZ2VudF9QYXN0YSB+IDEgKyBEcnVnKlZTX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9TVUwsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShTVUxfVlNfUGFzdENvbiksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwbG90X21vZGVsKFNVTF9WU19QYXN0Q29uLCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIlZTX2tpLmMiLCJTZXNzaW9uIiwiRHJ1ZyIpKQpwbG90KFNVTF9WU19QYXN0Q29uKQpxcW5vcm0ocmVzaWR1YWxzKFNVTF9WU19QYXN0Q29uKSkKCgoKUGFzdGExPC0gc2pQbG90OjpwbG90X21vZGVsKFNVTF9DYXVkYXRlX1Bhc3RDb24sIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsIHZsaW5lLmNvbG9yPSdibGFjaycsCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iQ2F1ZGF0ZSBLaSIpIAoKUGFzdGEyIDwtIHNqUGxvdDo6cGxvdF9tb2RlbChTVUxfUHV0YW1lbl9QYXN0Q29uLCAKICAgICAgICAgICAgICAgICAgIHNob3cudmFsdWVzPVRSVUUsIHNob3cucD1UUlVFLCB2bGluZS5jb2xvcj0nYmxhY2snLAogICAgICAgICAgICAgICAgICAgdGl0bGU9IlB1dGFtZW4gS2kiKSAKClBhc3RhMyA8LSBzalBsb3Q6OnBsb3RfbW9kZWwoU1VMX1ZTX1Bhc3RDb24sIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsIHZsaW5lLmNvbG9yPSdibGFjaycsCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iVlMgS2kiKSAKCmxldmVscyhQYXN0YTEkZGF0YSR0ZXJtKSA8LSBjKCJTVUwqS2kiLCAiU2Vzc2lvbiIsICJLaSIsICJTVUwiKQpsZXZlbHMoUGFzdGEyJGRhdGEkdGVybSkgPC0gYygiU1VMKktpIiwgIlNlc3Npb24iLCAiS2kiLCAiU1VMIikKbGV2ZWxzKFBhc3RhMyRkYXRhJHRlcm0pIDwtIGMoIlNVTCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIlNVTCIpCgpiZWhhdnBsb3RQYXN0YTEgPC0gZ2dhcnJhbmdlKFBhc3RhMSwgUGFzdGEyLCBQYXN0YTMsICBuY29sID0gMywKICBucm93ID0gMSwgICB3aWR0aHMgPSAxMCwKICBoZWlnaHRzID0gMykKCmFubm90YXRlX2ZpZ3VyZShiZWhhdnBsb3RQYXN0YTEsIHRvcCA9IHRleHRfZ3JvYigiRWZmZWN0IG9mIFNVTCBvbiBBTlQgY29udmVyZ2VudCB0aGlua2luZyIsIAogICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhY2UgPSAiYm9sZCIsIHNpemUgPSAyMSkpCgpgYGAKCgpgYGB7cn0KCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBQQVNUQSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMgRGl2ZXJnZW50ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgoKIyBTdWxwaXJpZGUqQ2F1ZGF0ZSBpbnRlcmFjdGlvbiBpbiBwcmVkaWN0aW5nIGRpdmVyZ2VudCBQYXN0YQpTVUxfQ2F1ZGF0ZV9QYXN0RGl2IDwtIGxtZXIoRGl2ZXJnZW50X1Bhc3RhIH4gMSArIERydWcqQ2F1ZGF0ZV9raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfU1VMLCBSRU1MPUYpCnByaW50KHN1bW1hcnkoU1VMX0NhdWRhdGVfUGFzdERpdiksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwbG90X21vZGVsKFNVTF9DYXVkYXRlX1Bhc3REaXYsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiQ2F1ZGF0ZV9raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChTVUxfQ2F1ZGF0ZV9QYXN0RGl2KQpxcW5vcm0ocmVzaWR1YWxzKFNVTF9DYXVkYXRlX1Bhc3REaXYpKQoKCiMgU3VscGlyaWRlKkNhdWRhdGUgaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBkaXZlcmdlbnQgUGFzdGEKU1VMX1B1dGFtZW5fUGFzdERpdiA8LSBsbWVyKERpdmVyZ2VudF9QYXN0YSB+IDEgKyBEcnVnKlB1dGFtZW5fa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX1NVTCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KFNVTF9QdXRhbWVuX1Bhc3REaXYpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChTVUxfUHV0YW1lbl9QYXN0RGl2LCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIlB1dGFtZW5fa2kuYyIsIlNlc3Npb24iLCJEcnVnIikpCnBsb3QoU1VMX1B1dGFtZW5fUGFzdERpdikKcXFub3JtKHJlc2lkdWFscyhTVUxfUHV0YW1lbl9QYXN0RGl2KSkKCiMgU3VscGlyaWRlKlZTIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgZGl2ZXJnZW50IFBhc3RhClNVTF9WU19QYXN0RGl2IDwtIGxtZXIoRGl2ZXJnZW50X1Bhc3RhIH4gMSArIERydWcqVlNfa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX1NVTCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KFNVTF9WU19QYXN0RGl2KSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CnBsb3RfbW9kZWwoU1VMX1ZTX1Bhc3REaXYsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiVlNfa2kuYyIsIlNlc3Npb24iLCJEcnVnIikpCnBsb3QoU1VMX1ZTX1Bhc3REaXYpCnFxbm9ybShyZXNpZHVhbHMoU1VMX1ZTX1Bhc3REaXYpKQoKCgpQYXN0YTQ8LSBzalBsb3Q6OnBsb3RfbW9kZWwoU1VMX0NhdWRhdGVfUGFzdERpdiwgCiAgICAgICAgICAgICAgICAgICBzaG93LnZhbHVlcz1UUlVFLCBzaG93LnA9VFJVRSwgdmxpbmUuY29sb3I9J2JsYWNrJywKICAgICAgICAgICAgICAgICAgIHRpdGxlPSJDYXVkYXRlIEtpIikgCgpQYXN0YTUgPC0gc2pQbG90OjpwbG90X21vZGVsKFNVTF9QdXRhbWVuX1Bhc3REaXYsIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsIHZsaW5lLmNvbG9yPSdibGFjaycsCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iUHV0YW1lbiBLaSIpIAoKUGFzdGE2IDwtIHNqUGxvdDo6cGxvdF9tb2RlbChTVUxfVlNfUGFzdERpdiwgCiAgICAgICAgICAgICAgICAgICBzaG93LnZhbHVlcz1UUlVFLCBzaG93LnA9VFJVRSwgdmxpbmUuY29sb3I9J2JsYWNrJywKICAgICAgICAgICAgICAgICAgIHRpdGxlPSJWUyBLaSIpIAoKbGV2ZWxzKFBhc3RhNCRkYXRhJHRlcm0pIDwtIGMoIlNVTCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIlNVTCIpCmxldmVscyhQYXN0YTUkZGF0YSR0ZXJtKSA8LSBjKCJTVUwqS2kiLCAiU2Vzc2lvbiIsICJLaSIsICJTVUwiKQpsZXZlbHMoUGFzdGE2JGRhdGEkdGVybSkgPC0gYygiU1VMKktpIiwgIlNlc3Npb24iLCAiS2kiLCAiU1VMIikKCmJlaGF2cGxvdFBhc3RhMiA8LSBnZ2FycmFuZ2UoUGFzdGE0LCBQYXN0YTUsIFBhc3RhNiwgIG5jb2wgPSAzLAogIG5yb3cgPSAxLCAgIHdpZHRocyA9IDEwLAogIGhlaWdodHMgPSAzKQoKYW5ub3RhdGVfZmlndXJlKGJlaGF2cGxvdFBhc3RhMiwgdG9wID0gdGV4dF9ncm9iKCJFZmZlY3Qgb2YgU1VMIG9uIEFOVCBkaXZlcmdlbnQgdGhpbmtpbmciLCAKICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmYWNlID0gImJvbGQiLCBzaXplID0gMjEpKQoKYGBgCgpgYGB7cn0KIyMjIyMjIyBEaWZmZXJlbnQgRW5kIFBBU1RBICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBTdWxwaXJpZGUqQ2F1ZGF0ZSBpbnRlcmFjdGlvbiBpbiBwcmVkaWN0aW5nIGRpdmVyZ2VudCBQYXN0YSBkaXZlcmdlbnQgcmVzcG9uc2UKU1VMX0NhdWRhdGVfUGFzdERpZiA8LSBsbWVyKERpZmZlcmVudEVuZCB+IDEgKyBEcnVnKkNhdWRhdGVfa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX1NVTCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KFNVTF9DYXVkYXRlX1Bhc3REaWYpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChTVUxfQ2F1ZGF0ZV9QYXN0RGlmLCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIkNhdWRhdGVfa2kuYyIsIlNlc3Npb24iLCJEcnVnIikpCnBsb3QoU1VMX0NhdWRhdGVfUGFzdERpZikKcXFub3JtKHJlc2lkdWFscyhTVUxfQ2F1ZGF0ZV9QYXN0RGlmKSkKCiMgU3VscGlyaWRlKlB1dGFtZW4gaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBkaXZlcmdlbnQgUGFzdGEgZGl2ZXJnZW50IHJlc3BvbnNlClNVTF9QdXRhbWVuX1Bhc3REaWYgPC0gbG1lcihEaWZmZXJlbnRFbmQgfiAxICsgRHJ1ZypQdXRhbWVuX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9TVUwsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShTVUxfUHV0YW1lbl9QYXN0RGlmKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CnBsb3RfbW9kZWwoU1VMX1B1dGFtZW5fUGFzdERpZiwgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJQdXRhbWVuX2tpLmMiLCJTZXNzaW9uIiwiRHJ1ZyIpKQpwbG90KFNVTF9QdXRhbWVuX1Bhc3REaWYpCnFxbm9ybShyZXNpZHVhbHMoU1VMX1B1dGFtZW5fUGFzdERpZikpCgojIFN1bHBpcmlkZSpWUyBpbnRlcmFjdGlvbiBpbiBwcmVkaWN0aW5nIGRpdmVyZ2VudCBQYXN0YSBkaXZlcmdlbnQgcmVzcG9uc2UKU1VMX1ZTX1Bhc3REaWYgPC0gbG1lcihEaWZmZXJlbnRFbmQgfiAxICsgRHJ1ZypWU19raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfU1VMLCBSRU1MPUYpCnByaW50KHN1bW1hcnkoU1VMX1ZTX1Bhc3REaWYpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChTVUxfVlNfUGFzdERpZiwgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJWU19raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChTVUxfVlNfUGFzdERpZikKcXFub3JtKHJlc2lkdWFscyhTVUxfVlNfUGFzdERpZikpCgoKCgpQYXN0YTc8LSBzalBsb3Q6OnBsb3RfbW9kZWwoU1VMX0NhdWRhdGVfUGFzdERpZiwgCiAgICAgICAgICAgICAgICAgICBzaG93LnZhbHVlcz1UUlVFLCBzaG93LnA9VFJVRSwgdmxpbmUuY29sb3I9J2JsYWNrJywKICAgICAgICAgICAgICAgICAgIHRpdGxlPSJDYXVkYXRlIEtpIikgCgpQYXN0YTggPC0gc2pQbG90OjpwbG90X21vZGVsKFNVTF9QdXRhbWVuX1Bhc3REaWYsIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsIHZsaW5lLmNvbG9yPSdibGFjaycsCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iUHV0YW1lbiBLaSIpIAoKUGFzdGE5IDwtIHNqUGxvdDo6cGxvdF9tb2RlbChTVUxfVlNfUGFzdERpZiwgCiAgICAgICAgICAgICAgICAgICBzaG93LnZhbHVlcz1UUlVFLCBzaG93LnA9VFJVRSwgdmxpbmUuY29sb3I9J2JsYWNrJywKICAgICAgICAgICAgICAgICAgIHRpdGxlPSJWUyBLaSIpIAoKbGV2ZWxzKFBhc3RhNyRkYXRhJHRlcm0pIDwtIGMoIlNVTCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIlNVTCIpCmxldmVscyhQYXN0YTgkZGF0YSR0ZXJtKSA8LSBjKCJTVUwqS2kiLCAiU2Vzc2lvbiIsICJLaSIsICJTVUwiKQpsZXZlbHMoUGFzdGE5JGRhdGEkdGVybSkgPC0gYygiU1VMKktpIiwgIlNlc3Npb24iLCAiS2kiLCAiU1VMIikKCmJlaGF2cGxvdFBhc3RhMyA8LSBnZ2FycmFuZ2UoUGFzdGE3LCBQYXN0YTgsIFBhc3RhOSwgIG5jb2wgPSAzLAogIG5yb3cgPSAxLCAgIHdpZHRocyA9IDEwLAogIGhlaWdodHMgPSAzKQoKYW5ub3RhdGVfZmlndXJlKGJlaGF2cGxvdFBhc3RhMywgdG9wID0gdGV4dF9ncm9iKCJFZmZlY3Qgb2YgU1VMIG9uIEFOVCByZXNwb25zZSBkaXZlcmdlbmNlIiwgCiAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDIxKSkKCmBgYAoKCgoKYGBge3J9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBNUEggIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE1QSCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMgTVBIICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBNUEggIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE1QSCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpgYGAKCgpgYGB7cn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFJBVCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBNUEgqQ2F1ZGF0ZSBpbnRlcmFjdGlvbiBpbiBwcmVkaWN0aW5nIENvbnZlcmdlbnQgUkFUCk1QSF9DYXVkYXRlX1JBVCA8LSBsbWVyKENvbnZlcmdlbnRfUkFUIH4gMSArIERydWcqQ2F1ZGF0ZV9raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILCBSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX0NhdWRhdGVfUkFUKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CnBsb3RfbW9kZWwoTVBIX0NhdWRhdGVfUkFULCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIkNhdWRhdGVfa2kuYyIsIlNlc3Npb24iLCJEcnVnIikpCnBsb3QoTVBIX0NhdWRhdGVfUkFUKQpxcW5vcm0ocmVzaWR1YWxzKE1QSF9DYXVkYXRlX1JBVCkpCgojIE1QSCpQdXRhbWVuIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgQ29udmVyZ2VudCBSQVQKTVBIX1B1dGFtZW5fUkFUIDwtIGxtZXIoQ29udmVyZ2VudF9SQVQgfiAxICsgRHJ1ZypQdXRhbWVuX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfUHV0YW1lbl9SQVQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChNUEhfUHV0YW1lbl9SQVQsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiUHV0YW1lbl9raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChNUEhfUHV0YW1lbl9SQVQpCnFxbm9ybShyZXNpZHVhbHMoTVBIX1B1dGFtZW5fUkFUKSkKCiMgU3VscGlyaWRlKlZTIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgQ29udmVyZ2VudCBSQVQKTVBIX1ZTX1JBVCA8LSBsbWVyKENvbnZlcmdlbnRfUkFUIH4gMSArIERydWcqVlNfa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX01QSCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KE1QSF9WU19SQVQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChNUEhfVlNfUkFULCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIlZTX2tpLmMiLCJTZXNzaW9uIiwiRHJ1ZyIpKQpwbG90KE1QSF9WU19SQVQpCnFxbm9ybShyZXNpZHVhbHMoTVBIX1ZTX1JBVCkpCmBgYAoKYGBge3J9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBBVVQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCiMgTVBIKkNhdWRhdGUgaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBkaXZlcmdlbnQgQVVUCk1QSF9DYXVkYXRlX0FVVCA8LSBsbWVyKEFVVF9kaXZlcmdlbnQgfiAxICsgRHJ1ZypDYXVkYXRlX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfQ2F1ZGF0ZV9BVVQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChNUEhfQ2F1ZGF0ZV9BVVQsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiQ2F1ZGF0ZV9raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChNUEhfQ2F1ZGF0ZV9BVVQpCnFxbm9ybShyZXNpZHVhbHMoTVBIX0NhdWRhdGVfQVVUKSkKCiMgTVBIKlB1dGFtZW4gaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBkaXZlcmdlbnQgQVVUCk1QSF9QdXRhbWVuX0FVVCA8LSBsbWVyKEFVVF9kaXZlcmdlbnQgfiAxICsgRHJ1ZypQdXRhbWVuX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfUHV0YW1lbl9BVVQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChNUEhfUHV0YW1lbl9BVVQsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiUHV0YW1lbl9raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChNUEhfUHV0YW1lbl9BVVQpCnFxbm9ybShyZXNpZHVhbHMoTVBIX1B1dGFtZW5fQVVUKSkKCiMgTVBIKlZTIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgZGl2ZXJnZW50IEFVVApNUEhfVlNfQVVUIDwtIGxtZXIoQVVUX2RpdmVyZ2VudCB+IDEgKyBEcnVnKlZTX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfVlNfQVVUKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CnBsb3RfbW9kZWwoTVBIX1ZTX0FVVCwgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJWU19raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChNUEhfVlNfQVVUKQpxcW5vcm0ocmVzaWR1YWxzKE1QSF9WU19BVVQpKQpgYGAKCgoKYGBge3J9CgojIyMjIyMjIyMjIyMjIyMjIyMjIyMgUEFTVEEgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIENvbnZlcmdlbnQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBNUEgqQ2F1ZGF0ZSBpbnRlcmFjdGlvbiBpbiBwcmVkaWN0aW5nIGNvbnZlcmdlbnQgUGFzdGEKTVBIX0NhdWRhdGVfUGFzdENvbiA8LSBsbWVyKENvbnZlcmdlbnRfUGFzdGEgfiAxICsgRHJ1ZypDYXVkYXRlX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsUkVNTD1GKQpwcmludChzdW1tYXJ5KE1QSF9DYXVkYXRlX1Bhc3RDb24pLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChNUEhfQ2F1ZGF0ZV9QYXN0Q29uLCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIkNhdWRhdGVfa2kuYyIsIlNlc3Npb24iLCJEcnVnIikpCnBsb3QoTVBIX0NhdWRhdGVfUGFzdENvbikKcXFub3JtKHJlc2lkdWFscyhNUEhfQ2F1ZGF0ZV9QYXN0Q29uKSkKCgojIE1QSCpQdXRhbWVuIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgY29udmVyZ2VudCBQYXN0YQpNUEhfUHV0YW1lbl9QYXN0Q29uIDwtIGxtZXIoQ29udmVyZ2VudF9QYXN0YSB+IDEgKyBEcnVnKlB1dGFtZW5fa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX01QSCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KE1QSF9QdXRhbWVuX1Bhc3RDb24pLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChNUEhfUHV0YW1lbl9QYXN0Q29uLCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIlB1dGFtZW5fa2kuYyIsIlNlc3Npb24iLCJEcnVnIikpCnBsb3QoTVBIX1B1dGFtZW5fUGFzdENvbikKcXFub3JtKHJlc2lkdWFscyhNUEhfUHV0YW1lbl9QYXN0Q29uKSkKCiMgTVBIKlZTIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgY29udmVyZ2VudCBQYXN0YQpNUEhfVlNfUGFzdENvbiA8LSBsbWVyKENvbnZlcmdlbnRfUGFzdGEgfiAxICsgRHJ1ZypWU19raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILCBSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX1ZTX1Bhc3RDb24pLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChNUEhfVlNfUGFzdENvbiwgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJWU19raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChNUEhfVlNfUGFzdENvbikKcXFub3JtKHJlc2lkdWFscyhNUEhfVlNfUGFzdENvbikpCgoKc2V0X3RoZW1lKAogIGJhc2UgPSB0aGVtZV9jbGFzc2ljKCksIAogIGxlZ2VuZC50aXRsZS5mYWNlID0gIml0YWxpYyIsICMgdGl0bGUgZm9udCBmYWNlCiAgbGVnZW5kLmluc2lkZSA9IFRSVUUsICAgICAgICAgIyBsZWdlbmQgaW5zaWRlIHBsb3QKICBsZWdlbmQuY29sb3IgPSAiZ3JleTUwIiwgICAgICAjIGxlZ2VuZCBsYWJlbCBjb2xvcgogIGxlZ2VuZC5wb3MgPSAiYm90dG9tIHJpZ2h0IiwgICMgbGVnZW5kIHBvc2l0aW9uIGluc2lkZSBwbG90CiAgdGl0bGUuc2l6ZSA9IDIsCiAgdGl0bGUuYWxpZ24gPSAiY2VudGVyIiwKICBheGlzLnRpdGxlLnNpemUgPSAxLjEsCiAgYXhpcy50ZXh0c2l6ZSA9IDEuMSwKICBsZWdlbmQuc2l6ZSA9IDEsCiAgbGVnZW5kLnRpdGxlLnNpemUgPSAyLAogIGdlb20ubGFiZWwuc2l6ZSA9IDMKKQoKQ29udmVyZ2VudDEgPC0gc2pQbG90OjpwbG90X21vZGVsKE1QSF9DYXVkYXRlX1Bhc3RDb24sCiAgICAgICAgICAgICAgICAgICBzaG93LnZhbHVlcz1UUlVFLCBzaG93LnA9VFJVRSwgdmxpbmUuY29sb3I9J2JsYWNrJywgCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iQ2F1ZGF0ZSBLaSIpIAoKQ29udmVyZ2VudDIgPC0gc2pQbG90OjpwbG90X21vZGVsKE1QSF9QdXRhbWVuX1Bhc3RDb24sIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsdmxpbmUuY29sb3I9J2JsYWNrJywKICAgICAgICAgICAgICAgICAgIHRpdGxlPSJQdXRhbWVuIEtpIikgCgpDb252ZXJnZW50MyA8LSBzalBsb3Q6OnBsb3RfbW9kZWwoTVBIX1ZTX1Bhc3RDb24sIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsIHZsaW5lLmNvbG9yPSdibGFjaycsCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iVlMgS2kiKSAKCmxldmVscyhDb252ZXJnZW50MSRkYXRhJHRlcm0pIDwtIGMoIk1QSCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIk1QSCIpCmxldmVscyhDb252ZXJnZW50MiRkYXRhJHRlcm0pIDwtIGMoIk1QSCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIk1QSCIpCmxldmVscyhDb252ZXJnZW50MyRkYXRhJHRlcm0pIDwtIGMoIk1QSCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIk1QSCIpCgoKYmVoYXZwbG90IDwtIGdnYXJyYW5nZShDb252ZXJnZW50MSwgQ29udmVyZ2VudDIsIENvbnZlcmdlbnQzLCAgbmNvbCA9IDMsCiAgbnJvdyA9IDEsICAgd2lkdGhzID0gMTAsCiAgaGVpZ2h0cyA9IDMpCgphbm5vdGF0ZV9maWd1cmUoYmVoYXZwbG90LCB0b3AgPSB0ZXh0X2dyb2IoIkVmZmVjdCBvZiBNUEggb24gY29udmVyZ2VudCB0aGlua2luZyIsIAogICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhY2UgPSAiYm9sZCIsIHNpemUgPSAyMSkpCgpgYGAKCmBgYHtyfQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFBBU1RBICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyBEaXZlcmdlbnQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyBNUEgqQ2F1ZGF0ZSBpbnRlcmFjdGlvbiBpbiBwcmVkaWN0aW5nIGRpdmVyZ2VudCBQYXN0YQpNUEhfQ2F1ZGF0ZV9QYXN0RGl2IDwtIGxtZXIoRGl2ZXJnZW50X1Bhc3RhIH4gMSArIERydWcqQ2F1ZGF0ZV9raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILCBSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX0NhdWRhdGVfUGFzdERpdiksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwbG90X21vZGVsKE1QSF9DYXVkYXRlX1Bhc3REaXYsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiQ2F1ZGF0ZV9raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChNUEhfQ2F1ZGF0ZV9QYXN0RGl2KQpxcW5vcm0ocmVzaWR1YWxzKE1QSF9DYXVkYXRlX1Bhc3REaXYpKQoKIyBNUEgqUHV0YW1lbiBpbnRlcmFjdGlvbiBpbiBwcmVkaWN0aW5nIGRpdmVyZ2VudCBQYXN0YQpNUEhfUHV0YW1lbl9QYXN0RGl2IDwtIGxtZXIoRGl2ZXJnZW50X1Bhc3RhIH4gMSArIERydWcqUHV0YW1lbl9raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILCBSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX1B1dGFtZW5fUGFzdERpdiksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwbG90X21vZGVsKE1QSF9QdXRhbWVuX1Bhc3REaXYsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiUHV0YW1lbl9raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChNUEhfUHV0YW1lbl9QYXN0RGl2KQpxcW5vcm0ocmVzaWR1YWxzKE1QSF9QdXRhbWVuX1Bhc3REaXYpKQoKIyBNUEgqVlMgaW50ZXJhY3Rpb24gaW4gcHJlZGljdGluZyBkaXZlcmdlbnQgUGFzdGEKTVBIX1ZTX1Bhc3REaXYgPC0gbG1lcihEaXZlcmdlbnRfUGFzdGEgfiAxICsgRHJ1ZypWU19raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILCBSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX1ZTX1Bhc3REaXYpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChNUEhfVlNfUGFzdERpdiwgdHlwZSA9ICJwcmVkIiwgdGVybXMgPSBjKCJWU19raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChNUEhfVlNfUGFzdERpdikKcXFub3JtKHJlc2lkdWFscyhNUEhfVlNfUGFzdERpdikpCgpEaXZlcmdlbnQxPC0gc2pQbG90OjpwbG90X21vZGVsKE1QSF9DYXVkYXRlX1Bhc3REaXYsIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsIHZsaW5lLmNvbG9yPSdibGFjaycsCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iQ2F1ZGF0ZSBLaSIpIAoKRGl2ZXJnZW50MiA8LSBzalBsb3Q6OnBsb3RfbW9kZWwoTVBIX1B1dGFtZW5fUGFzdERpdiwgCiAgICAgICAgICAgICAgICAgICBzaG93LnZhbHVlcz1UUlVFLCBzaG93LnA9VFJVRSwgdmxpbmUuY29sb3I9J2JsYWNrJywKICAgICAgICAgICAgICAgICAgIHRpdGxlPSJQdXRhbWVuIEtpIikgCgpEaXZlcmdlbnQzIDwtIHNqUGxvdDo6cGxvdF9tb2RlbChNUEhfVlNfUGFzdERpdiwgCiAgICAgICAgICAgICAgICAgICBzaG93LnZhbHVlcz1UUlVFLCBzaG93LnA9VFJVRSwgdmxpbmUuY29sb3I9J2JsYWNrJywKICAgICAgICAgICAgICAgICAgIHRpdGxlPSJWUyBLaSIpIAoKbGV2ZWxzKERpdmVyZ2VudDEkZGF0YSR0ZXJtKSA8LSBjKCJNUEgqS2kiLCAiU2Vzc2lvbiIsICJLaSIsICJNUEgiKQpsZXZlbHMoRGl2ZXJnZW50MiRkYXRhJHRlcm0pIDwtIGMoIk1QSCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIk1QSCIpCmxldmVscyhEaXZlcmdlbnQzJGRhdGEkdGVybSkgPC0gYygiTVBIKktpIiwgIlNlc3Npb24iLCAiS2kiLCAiTVBIIikKCmJlaGF2cGxvdDIgPC0gZ2dhcnJhbmdlKERpdmVyZ2VudDEsIERpdmVyZ2VudDIsIERpdmVyZ2VudDMsICBuY29sID0gMywKICBucm93ID0gMSwgICB3aWR0aHMgPSAxMCwKICBoZWlnaHRzID0gMykKCmFubm90YXRlX2ZpZ3VyZShiZWhhdnBsb3QyLCB0b3AgPSB0ZXh0X2dyb2IoIkVmZmVjdCBvZiBNUEggb24gZGl2ZXJnZW50IHRoaW5raW5nIiwgCiAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDIxKSkKCgpgYGAKCmBgYHtyfQojIyMjIyMjIERpZmZlcmVudCBFbmQgUEFTVEEgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIE1QSCpDYXVkYXRlIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgZGl2ZXJnZW50IFBhc3RhIGRpdmVyZ2VudCByZXNwb25zZQpNUEhfQ2F1ZGF0ZV9QYXN0RGlmIDwtIGxtZXIoRGlmZmVyZW50RW5kIH4gMSArIERydWcqQ2F1ZGF0ZV9raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILCBSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX0NhdWRhdGVfUGFzdERpZiksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwbG90X21vZGVsKE1QSF9DYXVkYXRlX1Bhc3REaWYsIHR5cGUgPSAicHJlZCIsIHRlcm1zID0gYygiQ2F1ZGF0ZV9raS5jIiwiU2Vzc2lvbiIsIkRydWciKSkKcGxvdChNUEhfQ2F1ZGF0ZV9QYXN0RGlmKQpxcW5vcm0ocmVzaWR1YWxzKE1QSF9DYXVkYXRlX1Bhc3REaWYpKQoKIyBNUEgqUHV0YW1lbiBpbnRlcmFjdGlvbiBpbiBwcmVkaWN0aW5nIGRpdmVyZ2VudCBQYXN0YSBkaXZlcmdlbnQgcmVzcG9uc2UKTVBIX1B1dGFtZW5fUGFzdERpZiA8LSBsbWVyKERpZmZlcmVudEVuZCB+IDEgKyBEcnVnKlB1dGFtZW5fa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX01QSCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KE1QSF9QdXRhbWVuX1Bhc3REaWYpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKcGxvdF9tb2RlbChNUEhfUHV0YW1lbl9QYXN0RGlmLCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIlB1dGFtZW5fa2kuYyIsIlNlc3Npb24iLCJEcnVnIikpCnBsb3QoTVBIX1B1dGFtZW5fUGFzdERpZikKcXFub3JtKHJlc2lkdWFscyhNUEhfUHV0YW1lbl9QYXN0RGlmKSkKCiMgTVBIKlZTIGludGVyYWN0aW9uIGluIHByZWRpY3RpbmcgZGl2ZXJnZW50IFBhc3RhIGRpdmVyZ2VudCByZXNwb25zZQpNUEhfVlNfUGFzdERpZiA8LSBsbWVyKERpZmZlcmVudEVuZCB+IDEgKyBEcnVnKlZTX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfVlNfUGFzdERpZiksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApwbG90X21vZGVsKE1QSF9WU19QYXN0RGlmLCB0eXBlID0gInByZWQiLCB0ZXJtcyA9IGMoIlZTX2tpLmMiLCJTZXNzaW9uIiwiRHJ1ZyIpKQpwbG90KE1QSF9WU19QYXN0RGlmKQpxcW5vcm0ocmVzaWR1YWxzKE1QSF9WU19QYXN0RGlmKSkKCgpBbGxEaWYgPC0gbG1lcihEaWZmZXJlbnRFbmQgfiAxICsgRHJ1ZypWU19raS5jKyBEcnVnKlB1dGFtZW5fa2kuYyArIERydWcqQ2F1ZGF0ZV9raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILCBSRU1MPUYpCnByaW50KHN1bW1hcnkoQWxsRGlmKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CgoKRGlmRW5kMTwtIHNqUGxvdDo6cGxvdF9tb2RlbChNUEhfQ2F1ZGF0ZV9QYXN0RGlmLCAKICAgICAgICAgICAgICAgICAgIHNob3cudmFsdWVzPVRSVUUsIHNob3cucD1UUlVFLCB2bGluZS5jb2xvcj0nYmxhY2snLAogICAgICAgICAgICAgICAgICAgdGl0bGU9IkNhdWRhdGUgS2kiKSAKCkRpZkVuZDIgPC0gc2pQbG90OjpwbG90X21vZGVsKE1QSF9QdXRhbWVuX1Bhc3REaWYsIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsIHZsaW5lLmNvbG9yPSdibGFjaycsCiAgICAgICAgICAgICAgICAgICB0aXRsZT0iUHV0YW1lbiBLaSIpIAoKRGlmRW5kMyA8LSBzalBsb3Q6OnBsb3RfbW9kZWwoTVBIX1ZTX1Bhc3REaWYsIAogICAgICAgICAgICAgICAgICAgc2hvdy52YWx1ZXM9VFJVRSwgc2hvdy5wPVRSVUUsICB2bGluZS5jb2xvcj0nYmxhY2snLAogICAgICAgICAgICAgICAgICAgdGl0bGU9IlZTIEtpIikgCgpsZXZlbHMoRGlmRW5kMSRkYXRhJHRlcm0pIDwtIGMoIk1QSCpLaSIsICJTZXNzaW9uIiwgIktpIiwgIk1QSCIpCmxldmVscyhEaWZFbmQyJGRhdGEkdGVybSkgPC0gYygiTVBIKktpIiwgIlNlc3Npb24iLCAiS2kiLCAiTVBIIikKbGV2ZWxzKERpZkVuZDMkZGF0YSR0ZXJtKSA8LSBjKCJNUEgqS2kiLCAiU2Vzc2lvbiIsICJLaSIsICJNUEgiKQoKYmVoYXZwbG90MyA8LSBnZ2FycmFuZ2UoRGlmRW5kMSwgRGlmRW5kMiwgRGlmRW5kMywgIG5jb2wgPSAzLAogIG5yb3cgPSAxLCAgIHdpZHRocyA9IDEwLAogIGhlaWdodHMgPSAzKQoKYW5ub3RhdGVfZmlndXJlKGJlaGF2cGxvdDMsIHRvcCA9IHRleHRfZ3JvYigiRWZmZWN0IG9mIE1QSCBvbiByZXNwb25zZSBkaXZlcmdlbmNlIiwgCiAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmFjZSA9ICJib2xkIiwgc2l6ZSA9IDIxKSkKCgpgYGAKCmBgYHtyfQpTZXNzaW9uMSA8LSBkYXRhQWxsW2dyZXAoIjEiLCBkYXRhQWxsJFNlc3Npb24pLF0KCmdnc2NhdHRlcihTZXNzaW9uMSwgeCA9ICJDYXVkYXRlX2tpIiwgeSA9ICJLRE9DU3RvdGFsIiwKICAgICAgICAgIGFkZCA9ICJyZWcubGluZSIsIGNvbmYuaW50ID0gVFJVRSwKICAgICAgICAgIGNvci5jb2VmID0gVFJVRSwgY29yLm1ldGhvZCA9ICJwZWFyc29uIiwKICAgICAgICAgIHhsYWIgPSAiQ2F1ZGF0ZUtpKSIsIHlsYWIgPSAiU3ViamVjdGl2ZUNyZWF0aXZpdHkiKQoKZ2dzY2F0dGVyKFNlc3Npb24xLCB4ID0gIlB1dGFtZW5fa2kiLCB5ID0gIktET0NTdG90YWwiLAogICAgICAgICAgYWRkID0gInJlZy5saW5lIiwgY29uZi5pbnQgPSBUUlVFLAogICAgICAgICAgY29yLmNvZWYgPSBUUlVFLCBjb3IubWV0aG9kID0gInBlYXJzb24iLAogICAgICAgICAgeGxhYiA9ICJDYXVkYXRlS2kpIiwgeWxhYiA9ICJTdWJqZWN0aXZlQ3JlYXRpdml0eSIpCgpnZ3NjYXR0ZXIoU2Vzc2lvbjEsIHggPSAiVlNfa2kiLCB5ID0gIktET0NTdG90YWwiLAogICAgICAgICAgYWRkID0gInJlZy5saW5lIiwgY29uZi5pbnQgPSBUUlVFLAogICAgICAgICAgY29yLmNvZWYgPSBUUlVFLCBjb3IubWV0aG9kID0gInBlYXJzb24iLAogICAgICAgICAgeGxhYiA9ICJDYXVkYXRlS2kpIiwgeWxhYiA9ICJTdWJqZWN0aXZlQ3JlYXRpdml0eSIpCgoKYGBgCgpgYGB7cn0KIyBFY29sb2dpY2FsIHZhbGlkaXR5CgpDb25DciA8LSBsbWVyKENvbnZlcmdlbnRfUGFzdGEgfiAxICsgS0RPQ1N0b3RhbCArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRhdGFBbGwsIFJFTUw9RikgCnByaW50KHN1bW1hcnkoQ29uQ3IpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCkRpdkFydCA8LSBsbWVyKERpdmVyZ2VudF9QYXN0YSB+IDEgKyBLRE9DU3RvdGFsICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGF0YUFsbCwgUkVNTD1GKSAKcHJpbnQoc3VtbWFyeShEaXZBcnQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCkRpZkVuZCA8LSBsbWVyKERpZmZlcmVudEVuZCB+IDEgKyBLRE9DU3RvdGFsICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGF0YUFsbCwgUkVNTD1GKSAKcHJpbnQoc3VtbWFyeShEaWZFbmQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCkNvbkNyIDwtIGxtZXIoQ29udmVyZ2VudF9SQVQgfiAxICsgS0RPQ1N0b3RhbCArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRhdGFBbGwsIFJFTUw9RikgCnByaW50KHN1bW1hcnkoQ29uQ3IpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCkNvbkNyIDwtIGxtZXIoQVVUX2RpdmVyZ2VudCB+IDEgKyBLRE9DU3RvdGFsICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGF0YUFsbCwgUkVNTD1GKSAKcHJpbnQoc3VtbWFyeShDb25DciksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeApgYGAKCmBgYHtyfQoKIyMgY3JpdGVyaW9uIHZhbGlkaXR5CgpDb25EaXZQYXN0YSA8LSBsbWVyKENvbnZlcmdlbnRfUGFzdGEgfiAxICsgRGl2ZXJnZW50X1Bhc3RhICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGF0YUFsbCwgUkVNTD1GKSAKcHJpbnQoc3VtbWFyeShDb25EaXZQYXN0YSksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKQ29uRGlmUGFzdGEgPC0gbG1lcihDb252ZXJnZW50X1Bhc3RhIH4gMSArIERpZmZlcmVudEVuZCArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRhdGFBbGwsIFJFTUw9RikgCnByaW50KHN1bW1hcnkoQ29uRGlmUGFzdGEpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCiMjIGNvbnN0cnVjdCB2YWxpZGl0eQoKCkNvbkRpZlJBVCA8LSBsbWVyKENvbnZlcmdlbnRfUkFUIH4gMSArIERpZmZlcmVudEVuZCArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRhdGFBbGwsIFJFTUw9RikgCnByaW50KHN1bW1hcnkoQ29uRGlmUkFUKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CgpDb25QYXN0YVJBVCA8LSBsbWVyKENvbnZlcmdlbnRfUkFUIH4gMSArIENvbnZlcmdlbnRfUGFzdGEgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkYXRhQWxsLCBSRU1MPUYpIApwcmludChzdW1tYXJ5KENvblBhc3RhUkFUKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CgpEaXZQYXN0YUFVVCA8LSBsbWVyKEFVVF9kaXZlcmdlbnQgfiAxICsgRGl2ZXJnZW50X1Bhc3RhICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGF0YUFsbCwgUkVNTD1GKSAKcHJpbnQoc3VtbWFyeShEaXZQYXN0YUFVVCksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKRGlmUGFzdGFBVVQgPC0gbG1lcihBVVRfZGl2ZXJnZW50IH4gMSArIERpZmZlcmVudEVuZCArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRhdGFBbGwsIFJFTUw9RikgCnByaW50KHN1bW1hcnkoRGlmUGFzdGFBVVQpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCkNvbkRpdlJBVEFVVCA8LSBsbWVyKENvbnZlcmdlbnRfUkFUIH4gMSArIEFVVF9kaXZlcmdlbnQgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkYXRhQWxsLCBSRU1MPUYpIApwcmludChzdW1tYXJ5KENvbkRpdlJBVEFVVCksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKCmBgYAoKYGBge3J9CmlmICghcmVxdWlyZShyZW1vdGVzKSkgewogICAgaW5zdGFsbC5wYWNrYWdlcygicmVtb3RlcyIpCn0KcmVtb3Rlczo6aW5zdGFsbF9naXRodWIoJ2pvcnZsYW4vcmFpbmNsb3VkcGxvdHMnKQoKbGlicmFyeShyYWluY2xvdWRwbG90cykKCmxpYnJhcnkoZm9yY2F0cykKCiMgaHR0cHM6Ly9naXRodWIuY29tL2pvcnZsYW4vcmFpbmNsb3VkcGxvdHMKYGBgCmBgYHtyfQpwbG90X2RhdGE8LWRmX01QSFtjKCJEaWZmZXJlbnRFbmQiLCJQdXRhbWVuU3BsaXQiLCJJRCIsIkRydWciKV0KY29sbmFtZXMocGxvdF9kYXRhKVsxXTwtInlfYXhpcyIKY29sbmFtZXMocGxvdF9kYXRhKVszXTwtImlkIgpjb2xuYW1lcyhwbG90X2RhdGEpWzRdPC0iZ3JvdXAiCgoKcGxvdF9kYXRhMiA8LSBwbG90X2RhdGEgJT4lIG11dGF0ZSh4X2F4aXMgPQogICAgICAgICAgICAgICAgICAgICBjYXNlX3doZW4oKFB1dGFtZW5TcGxpdCA9PSAwICYgZ3JvdXAgPT0gIlBCTyIpIH4gMSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHV0YW1lblNwbGl0ID09IDEgJiBncm91cCAgPT0gIlBCTyIpIH4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQdXRhbWVuU3BsaXQgPT0gMCAmIGdyb3VwICA9PSAiTVBIIikgfiAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB1dGFtZW5TcGxpdCA9PSAxICYgZ3JvdXAgID09ICJNUEgiKSB+IDIpKQp0ZW1wPC1wbG90X2RhdGEkUHV0YW1lblNwbGl0CgpwbG90X2RhdGEkUHV0YW1lblNwbGl0PC1wbG90X2RhdGEyJHhfYXhpcwpjb2xuYW1lcyhwbG90X2RhdGEpWzJdPC0ieF9heGlzIgoKZm9yIChpIGluIDE6MTgwKQp7CnBsb3RfZGF0YVtpLDVdIDwtIHBsb3RfZGF0YVtpLDJdICsgcnVuaWYoMSwgMCwgMC4wOSkKfQpjb2xuYW1lcyhwbG90X2RhdGEpWzVdPC0iaml0IgoKcGxvdF9kYXRhWyw2XSA8LXRlbXAKY29sbmFtZXMocGxvdF9kYXRhKVs2XTwtIlB1dGFtZW5TcGxpdCIKCnBsb3RfZGF0YSA8LSBwbG90X2RhdGEgJT4lIG11dGF0ZShQdXRhbWVuU3BsaXQgPQogICAgICAgICAgICAgICAgICAgICBjYXNlX3doZW4oKFB1dGFtZW5TcGxpdCA9PSAwKSB+ICJsb3cgS2kiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQdXRhbWVuU3BsaXQgPT0gMSApIH4gImhpZ2ggS2kiKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAKIyBmaXJzdCBjb2x1bW4gaXMgdGhlIHktYXhpcyBzY29yZXMsIHNlY29uZCBjb2x1bW4gaXMgdGhlIHBsYWNlbWVudCBvZiB0aGUgYm94IHBsb3RzIGFuZCBzaG91bGQgdmFyeSBiZXR3ZWVuIDEsMSwwMSwyLDIuMDEgYmFzZWQgb24gd2hlcmUgdGhlIG1lYW5zIHNob3VsZCBiZSBkaXNwbGF5ZWQgYW5kIGNhbGxlZCB4X2F4aXMsIHRoaXJkIGNvbHVtbiBpcyBJZHMgYW5kIG5hbWVkIGlkLCBmb3VydGggY29sdW1uIGlzIHRoZSBncm91cCBsaWtlIGRydWcgZ3JvdXAsIDV0aCBjb2x1bW4gaXMgdGhlIGppdHRlciBhbmQgc2hvdWxkIGJlIHJhbmRvbSBudW1iZXJzIGJldHdlZW4gMSBhbmQgMgoKc2V0X3RoZW1lKAogIGJhc2UgPSB0aGVtZV9jbGFzc2ljKChiYXNlX3NpemUgPSAxOCkpLCAKICBsZWdlbmQudGl0bGUuZmFjZSA9ICJpdGFsaWMiLCAjIHRpdGxlIGZvbnQgZmFjZQogIGxlZ2VuZC5pbnNpZGUgPSBUUlVFLCAgICAgICAgICMgbGVnZW5kIGluc2lkZSBwbG90CiAgbGVnZW5kLmNvbG9yID0gImdyZXk1MCIsICAgICAgIyBsZWdlbmQgbGFiZWwgY29sb3IKICBsZWdlbmQucG9zID0gImJvdHRvbSByaWdodCIsICAjIGxlZ2VuZCBwb3NpdGlvbiBpbnNpZGUgcGxvdAogIHRpdGxlLnNpemUgPSA0LAogIHRpdGxlLmFsaWduID0gImNlbnRlciIsCiAgYXhpcy50aXRsZS5zaXplID0gMS4zLAogIGF4aXMudGV4dHNpemUgPSAxLjEsCiAgbGVnZW5kLnNpemUgPSAxLAogIGxlZ2VuZC50aXRsZS5zaXplID0gMiwKICBnZW9tLmxhYmVsLnNpemUgPSAzLCAKKQoKCnJhaW5jbG91ZF8yeDIgPC0gcmFpbmNsb3VkXzJ4Ml9yZXBtZXMoCiAgZGF0YSA9IHBsb3RfZGF0YSwKICBjb2xvcnMgPSAoYygnZG9kZ2VyYmx1ZScsICdkYXJrb3JhbmdlJywgJ2RvZGdlcmJsdWUnLCAnZGFya29yYW5nZScpKSwKICBmaWxscyA9IChjKCdkb2RnZXJibHVlJywgJ2RhcmtvcmFuZ2UnLCAnZG9kZ2VyYmx1ZScsICdkYXJrb3JhbmdlJykpLAogIGxpbmVfY29sb3IgPSAnZ3JheScsCiAgbGluZV9hbHBoYSA9IC4zLAogIHNpemUgPSAxLAogIGFscGhhID0gLjYsCiAgc3ByZWFkX3hfdGlja3MgPSBUUlVFKSArICBmYWNldF93cmFwKH5mY3RfcmV2KFB1dGFtZW5TcGxpdCkpICsKCnNjYWxlX3hfY29udGludW91cyhicmVha3M9YygxLDIpLCBsYWJlbHM9YygiUGxhY2VibyIsICJNUEgiKSwgbGltaXRzPWMoMCwgMykpICsKICB4bGFiKCJEcnVnIikgKyAKICB5bGFiKCJSZXNwb25zZSBEaXZlcmdlbmNlIikgCgpyYWluY2xvdWRfMngyIAoKZ2dzYXZlKCdkYXRhUkQudGlmZicsIHVuaXRzPSJpbiIsIHdpZHRoPTE1LCBoZWlnaHQ9NiwgZHBpPTMwMCwgY29tcHJlc3Npb24gPSAnbHp3JykKCgpgYGAKCmBgYHtyfQpkYXRhU2tpcHBlZFJBVCA8LSByZWFkLmNzdignfi9Ecm9wYm94L0RDQ04vQ3JlYXRpdml0eS9Ta2lwcGVkSXRlbXNSQVRfVXBkYXRlZC5jc3YnKQoKZGF0YVNraXBwZWQgPC0gbG1lcihTa2lwcGVkSXRlbXMgfiAxICsgU2Vzc2lvbiArICgxIHwgc3ViamVjdCksIGRhdGEgPSBkYXRhU2tpcHBlZFJBVCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KGRhdGFTa2lwcGVkKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CgoKYGBgCgpgYGB7cn0KaW5zdGFsbC5wYWNrYWdlcygiUGVyZm9ybWFuY2VBbmFseXRpY3MiKQpsaWJyYXJ5KFBlcmZvcm1hbmNlQW5hbHl0aWNzKQoKbXl2YXJzIDwtIGMoIkNvbnZlcmdlbnRfUGFzdGEiLCAiRGl2ZXJnZW50X1Bhc3RhIiwgIkNvbl9EaXYiLCAiRGlmZmVyZW50RW5kIiwgIkFVVF9kaXZlcmdlbnQiLCAiQ29udmVyZ2VudF9SQVQiLCJBVVRfUkFUX2RpZmYiLCAiRGl2X0Nvbl9QYXN0YV9EaWYiLCJJUF9EaWYxIiwgIklQX0RpZjIiLCAiSVBfRGlmMyIsICJJUF9EaWY0IiwgIkRldmlhbmNlX0RpZjEiLCAiRGV2aWFuY2VfRGlmMiIsICJEZXZpYW5jZV9EaWYzIiwgIkRldmlhbmNlX0RpZjQiLCJSZWRvX0RpZjEiLCAiUmVkb19EaWYyIiwgIlJlZG9fRGlmMyIsICJSZWRvX0RpZjQiLCJJUF9Bdl9EaWYiLCJSZWRvX0F2X0RpZiIsIkRldmlhbmNlX0F2X0RpZiIpCgpvbmx5QXZzIDwtIGMoIkNvbnZlcmdlbnRfUGFzdGEiLCAiRGl2ZXJnZW50X1Bhc3RhIiwgIkNvbl9EaXYiLCAiRGlmZmVyZW50RW5kIiwgIkFVVF9kaXZlcmdlbnQiLCAiQ29udmVyZ2VudF9SQVQiLCJBVVRfUkFUX2RpZmYiLCAiRGl2X0Nvbl9QYXN0YV9EaWYiLCJJUF9Bdl9EaWYiLCJSZWRvX0F2X0RpZiIsIkRldmlhbmNlX0F2X0RpZiIpCgoKbmV3ZGF0YSA8LSBkYXRhX1BCT1tteXZhcnNdCkF2ZGF0YSA8LSBkYXRhX1BCT1tvbmx5QXZzXQoKCmNoYXJ0LkNvcnJlbGF0aW9uKG5ld0RldmlhbmNlZGF0YSwgaGlzdG9ncmFtID0gVFJVRSwgbWV0aG9kID0gInBlYXJzb24iKQpjaGFydC5Db3JyZWxhdGlvbihuZXdSZWRvZGF0YSwgaGlzdG9ncmFtID0gVFJVRSwgbWV0aG9kID0gInBlYXJzb24iKQpjaGFydC5Db3JyZWxhdGlvbihuZXdJUGRhdGEsIGhpc3RvZ3JhbSA9IFRSVUUsIG1ldGhvZCA9ICJwZWFyc29uIikKCgpsaWJyYXJ5KGNvcnJwbG90KQoKTSA9IGNvcihuZXdkYXRhLHVzZT0icGFpcndpc2UuY29tcGxldGUub2JzIikKdGVzdFJlcyA9IGNvci5tdGVzdChuZXdkYXRhLCBjb25mLmxldmVsID0gMC45NSkKY29ycnBsb3QoTSwgbWV0aG9kID0gJ251bWJlcicpICMgY29sb3JmdWwgbnVtYmVyCiMjIGxlYXZlIGJsYW5rIG9uIG5vbi1zaWduaWZpY2FudCBjb2VmZmljaWVudAojIyBhZGQgc2lnbmlmaWNhbnQgY29ycmVsYXRpb24gY29lZmZpY2llbnRzCmNvcnJwbG90KE0sIHAubWF0ID0gdGVzdFJlcyRwLCBtZXRob2QgPSAnY2lyY2xlJywgdHlwZSA9ICdsb3dlcicsIGluc2lnPSdibGFuaycsCiAgICAgICAgIGFkZENvZWYuY29sID0nYmxhY2snLCBudW1iZXIuY2V4ID0gMC44LCBkaWFnPUZBTFNFKQoKTSA9IGNvcihBdmRhdGEsdXNlPSJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKQp0ZXN0UmVzID0gY29yLm10ZXN0KEF2ZGF0YSwgY29uZi5sZXZlbCA9IDAuOTUpCmNvcnJwbG90KE0sIG1ldGhvZCA9ICdudW1iZXInKSAjIGNvbG9yZnVsIG51bWJlcgojIyBsZWF2ZSBibGFuayBvbiBub24tc2lnbmlmaWNhbnQgY29lZmZpY2llbnQKIyMgYWRkIHNpZ25pZmljYW50IGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50cwpjb3JycGxvdChNLCBwLm1hdCA9IHRlc3RSZXMkcCwgbWV0aG9kID0gJ2NpcmNsZScsIHR5cGUgPSAnbG93ZXInLCBpbnNpZz0nYmxhbmsnLAogICAgICAgICBhZGRDb2VmLmNvbCA9J2JsYWNrJywgbnVtYmVyLmNleCA9IDAuOCwgZGlhZz1GQUxTRSkKCmRhdGFfTVBIIDwtIGRwbHlyOjpmaWx0ZXIoZGF0YUFsbCwgRHJ1ZyAlaW4lIGMoIk1QSCIpKSAgCmRhdGFfTVBIIDwtIGRhdGFfTVBIW29yZGVyKGRhdGFfTVBIJElEKSxdCmRhdGFfU1VMIDwtIGRwbHlyOjpmaWx0ZXIoZGF0YUFsbCwgRHJ1ZyAlaW4lIGMoIlNVTCIpKQpkYXRhX1NVTCA8LSBkYXRhX1NVTFtvcmRlcihkYXRhX1NVTCRJRCksXQpkYXRhX1BCTyA8LSBkcGx5cjo6ZmlsdGVyKGRhdGFBbGwsIERydWcgJWluJSBjKCJQQk8iKSkKZGF0YV9QQk8gPC0gZGF0YV9QQk9bb3JkZXIoZGF0YV9QQk8kSUQpLF0KCgpkZl9Db3JyZWxhdGlvbnMgPC0gZGF0YS5mcmFtZShtYXRyaXgobmNvbCA9IDgsIG5yb3cgPSA5MykpCnggPC0gYygiSUQiLCAiTVBIX1BCT19SZWRvX0F2IiwgIk1QSF9QQk9fSVBfQXYiLCJNUEhfUEJPX0FVVF9kaXZlcmdlbnQiLCJNUEhfUEJPX0RpdmVyZ2VudF9QYXN0YSIsIk1QSF9QQk9fRGlmZmVyZW50RW5kIiwiTVBIX1BCT19Db252ZXJnZW50X1JBVCIsIk1QSF9QQk9fQ29udmVyZ2VudF9QQVNUQSIpCmNvbG5hbWVzKGRmX0NvcnJlbGF0aW9ucykgPC0geAoKZGZfQ29ycmVsYXRpb25zJElEIDwtIGRhdGFfTVBIJElECmRmX0NvcnJlbGF0aW9ucyRNUEhfUEJPX1JlZG9fQXYgPC0gZGF0YV9NUEgkUmVkb19Bdl9EaWYtZGF0YV9QQk8kUmVkb19Bdl9EaWYKZGZfQ29ycmVsYXRpb25zJE1QSF9QQk9fSVBfQXYgPC0gZGF0YV9NUEgkSVBfQXZfRGlmLWRhdGFfUEJPJElQX0F2X0RpZgpkZl9Db3JyZWxhdGlvbnMkTVBIX1BCT19BVVRfZGl2ZXJnZW50IDwtIGRhdGFfTVBIJEFVVF9kaXZlcmdlbnQtZGF0YV9QQk8kQVVUX2RpdmVyZ2VudApkZl9Db3JyZWxhdGlvbnMkTVBIX1BCT19EaXZlcmdlbnRfUGFzdGEgPC0gZGF0YV9NUEgkRGl2ZXJnZW50X1Bhc3RhLWRhdGFfUEJPJERpdmVyZ2VudF9QYXN0YQpkZl9Db3JyZWxhdGlvbnMkTVBIX1BCT19EaWZmZXJlbnRFbmQgPC0gZGF0YV9NUEgkRGlmZmVyZW50RW5kLWRhdGFfUEJPJERpZmZlcmVudEVuZApkZl9Db3JyZWxhdGlvbnMkTVBIX1BCT19Db252ZXJnZW50X1JBVCA8LSBkYXRhX01QSCRDb252ZXJnZW50X1JBVC1kYXRhX1BCTyRDb252ZXJnZW50X1JBVApkZl9Db3JyZWxhdGlvbnMkTVBIX1BCT19Db252ZXJnZW50X1BBU1RBIDwtIGRhdGFfTVBIJENvbnZlcmdlbnRfUGFzdGEtZGF0YV9QQk8kQ29udmVyZ2VudF9QYXN0YQoKCgpNID0gY29yKGRmX0NvcnJlbGF0aW9ucyx1c2U9InBhaXJ3aXNlLmNvbXBsZXRlLm9icyIpCnRlc3RSZXMgPSBjb3IubXRlc3QoZGZfQ29ycmVsYXRpb25zLCBjb25mLmxldmVsID0gMC45NSkKY29ycnBsb3QoTSwgbWV0aG9kID0gJ251bWJlcicpICMgY29sb3JmdWwgbnVtYmVyCiMjIGxlYXZlIGJsYW5rIG9uIG5vbi1zaWduaWZpY2FudCBjb2VmZmljaWVudAojIyBhZGQgc2lnbmlmaWNhbnQgY29ycmVsYXRpb24gY29lZmZpY2llbnRzCmNvcnJwbG90KE0sIHAubWF0ID0gdGVzdFJlcyRwLCBtZXRob2QgPSAnY2lyY2xlJywgdHlwZSA9ICdsb3dlcicsIGluc2lnPSdibGFuaycsCiAgICAgICAgIGFkZENvZWYuY29sID0nYmxhY2snLCBudW1iZXIuY2V4ID0gMC44LCBkaWFnPUZBTFNFKQoKCgpkZl9TVUxfY29yIDwtIGRhdGEuZnJhbWUobWF0cml4KG5jb2wgPSA4LCBucm93ID0gOTMpKQp4IDwtIGMoIklEIiwgIlNVTF9QQk9fUmVkb19BdiIsICJTVUxfUEJPX0lQX0F2IiwiU1VMX1BCT19BVVRfZGl2ZXJnZW50IiwiU1VMX1BCT19EaXZlcmdlbnRfUGFzdGEiLCJTVUxfUEJPX0RpZmZlcmVudEVuZCIsIlNVTF9QQk9fQ29udmVyZ2VudF9SQVQiLCJTVUxfUEJPX0NvbnZlcmdlbnRfUEFTVEEiKQpjb2xuYW1lcyhkZl9TVUxfY29yKSA8LSB4CgoKZGZfU1VMX2NvciRJRCA8LSBkYXRhX1NVTCRJRApkZl9TVUxfY29yJFNVTF9QQk9fUmVkb19BdiA8LSBkYXRhX1NVTCRSZWRvX0F2X0RpZi1kYXRhX1BCTyRSZWRvX0F2X0RpZgpkZl9TVUxfY29yJFNVTF9QQk9fSVBfQXYgPC0gZGF0YV9TVUwkSVBfQXZfRGlmLWRhdGFfUEJPJElQX0F2X0RpZgpkZl9TVUxfY29yJFNVTF9QQk9fQVVUX2RpdmVyZ2VudCA8LSBkYXRhX1NVTCRBVVRfZGl2ZXJnZW50LWRhdGFfUEJPJEFVVF9kaXZlcmdlbnQKZGZfU1VMX2NvciRTVUxfUEJPX0RpdmVyZ2VudF9QYXN0YSA8LSBkYXRhX1NVTCREaXZlcmdlbnRfUGFzdGEtZGF0YV9QQk8kRGl2ZXJnZW50X1Bhc3RhCmRmX1NVTF9jb3IkU1VMX1BCT19EaWZmZXJlbnRFbmQgPC0gZGF0YV9TVUwkRGlmZmVyZW50RW5kLWRhdGFfUEJPJERpZmZlcmVudEVuZApkZl9TVUxfY29yJFNVTF9QQk9fQ29udmVyZ2VudF9SQVQgPC0gZGF0YV9TVUwkQ29udmVyZ2VudF9SQVQtZGF0YV9QQk8kQ29udmVyZ2VudF9SQVQKZGZfU1VMX2NvciRTVUxfUEJPX0NvbnZlcmdlbnRfUEFTVEEgPC0gZGF0YV9TVUwkQ29udmVyZ2VudF9QYXN0YS1kYXRhX1BCTyRDb252ZXJnZW50X1Bhc3RhCgpNID0gY29yKGRmX1NVTF9jb3IsdXNlPSJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKQp0ZXN0UmVzID0gY29yLm10ZXN0KGRmX1NVTF9jb3IsIGNvbmYubGV2ZWwgPSAwLjk1KQpjb3JycGxvdChNLCBtZXRob2QgPSAnbnVtYmVyJykgIyBjb2xvcmZ1bCBudW1iZXIKIyMgbGVhdmUgYmxhbmsgb24gbm9uLXNpZ25pZmljYW50IGNvZWZmaWNpZW50CiMjIGFkZCBzaWduaWZpY2FudCBjb3JyZWxhdGlvbiBjb2VmZmljaWVudHMKY29ycnBsb3QoTSwgcC5tYXQgPSB0ZXN0UmVzJHAsIG1ldGhvZCA9ICdjaXJjbGUnLCB0eXBlID0gJ2xvd2VyJywgaW5zaWc9J2JsYW5rJywKICAgICAgICAgYWRkQ29lZi5jb2wgPSdibGFjaycsIG51bWJlci5jZXggPSAwLjgsIGRpYWc9RkFMU0UpCgoKYGBgCgpgYGB7cn0KIyBUb3RhbCBudW1iZXIgb2YgaWRlYXMgaW4gUEFTVEEKTVBIX0NhdWRhdGVfVG90YWwgPC0gbG1lcihUb3RhbCB+IDEgKyBEcnVnKkNhdWRhdGVfa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX01QSCxSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX0NhdWRhdGVfVG90YWwpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCk1QSF9QdXRhbWVuX1RvdGFsIDwtIGxtZXIoVG90YWwgfiAxICsgRHJ1ZypQdXRhbWVuX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsUkVNTD1GKQpwcmludChzdW1tYXJ5KE1QSF9QdXRhbWVuX1RvdGFsKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CgpNUEhfVlNfVG90YWwgPC0gbG1lcihUb3RhbCB+IDEgKyBEcnVnKlZTX2tpICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfVlNfVG90YWwpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCiMjIENvbnZlcmdlbnQgUEFTVEEgY29ycmVjdGVkIGZvciBUb3RhbCBudW1iZXIgb2YgaWRlYXMKTVBIX0NhdWRhdGVfQ29uVG90YWwgPC0gbG1lcihDb25fVG90YWwgfiAxICsgRHJ1ZypDYXVkYXRlX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsUkVNTD1GKQpwcmludChzdW1tYXJ5KE1QSF9DYXVkYXRlX0NvblRvdGFsKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CgpNUEhfUHV0YW1lbl9Db25Ub3RhbCA8LSBsbWVyKENvbl9Ub3RhbCB+IDEgKyBEcnVnKlB1dGFtZW5fa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX01QSCxSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX1B1dGFtZW5fQ29uVG90YWwpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCk1QSF9WU19Db25Ub3RhbCA8LSBsbWVyKENvbl9Ub3RhbCB+IDEgKyBEcnVnKlZTX2tpICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfVlNfQ29uVG90YWwpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCiMjIERpdmVyZ2VudCBQQVNUQSBjb3JyZWN0ZWQgZm9yIFRvdGFsIG51bWJlciBvZiBpZGVhcwpNUEhfQ2F1ZGF0ZV9EaXZUb3RhbCA8LSBsbWVyKERpdl9Ub3RhbCB+IDEgKyBEcnVnKkNhdWRhdGVfa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX01QSCxSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX0NhdWRhdGVfRGl2VG90YWwpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCk1QSF9QdXRhbWVuX0RpdlRvdGFsIDwtIGxtZXIoRGl2X1RvdGFsIH4gMSArIERydWcqUHV0YW1lbl9raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfUHV0YW1lbl9EaXZUb3RhbCksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKTVBIX1ZTX0RpdlRvdGFsIDwtIGxtZXIoRGl2X1RvdGFsIH4gMSArIERydWcqVlNfa2kgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsUkVNTD1GKQpwcmludChzdW1tYXJ5KE1QSF9WU19EaXZUb3RhbCksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKIyMgRGlmZmVyZW50IGVuZGluZyBQQVNUQSBjb3JyZWN0ZWQgZm9yIFRvdGFsIG51bWJlciBvZiBpZGVhcwpNUEhfQ2F1ZGF0ZV9EaWZFbmRUb3RhbCA8LSBsbWVyKERpZkVuZF9Ub3RhbCB+IDEgKyBEcnVnKkNhdWRhdGVfa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX01QSCxSRU1MPUYpCnByaW50KHN1bW1hcnkoTVBIX0NhdWRhdGVfRGlmRW5kVG90YWwpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCk1QSF9QdXRhbWVuX0RpZkVuZFRvdGFsIDwtIGxtZXIoRGlmRW5kX1RvdGFsIH4gMSArIERydWcqUHV0YW1lbl9raS5jICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBILFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfUHV0YW1lbl9EaWZFbmRUb3RhbCksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKTVBIX1ZTX0RpZkVuZFRvdGFsIDwtIGxtZXIoRGlmRW5kX1RvdGFsIH4gMSArIERydWcqVlNfa2kgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEgsUkVNTD1GKQpwcmludChzdW1tYXJ5KE1QSF9WU19EaWZFbmRUb3RhbCksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKYGBgCgpgYGB7cn0KCmRmX01QSF9Mb3dRIDwtIGRwbHlyOjpmaWx0ZXIoZGZfTVBILCBQdXRhbWVuUXVhcnRpbGUgJWluJSBjKCIxIikpICAKZGZfTVBIX0hpZ2hRIDwtIGRwbHlyOjpmaWx0ZXIoZGZfTVBILCBQdXRhbWVuUXVhcnRpbGUgJWluJSBjKCIyIikpICAKCk1QSF9QdXRhbWVuX1Bhc3REaWZfTG93USA8LSBsbWVyKERpZmZlcmVudEVuZCB+IDEgKyBEcnVnICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBIX0xvd1EsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfUHV0YW1lbl9QYXN0RGlmX0xvd1EpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKCk1QSF9QdXRhbWVuX1Bhc3REaWZfSGlRIDwtIGxtZXIoRGlmZmVyZW50RW5kIH4gMSArIERydWcgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9NUEhfSGlnaFEsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShNUEhfUHV0YW1lbl9QYXN0RGlmX0hpUSksIGNvcnI9RikgIyBwcmludCBzdW1tYXJ5IHdpdGhvdXQgZml4ZWQgZWZmZWN0IGNvcnJlbGF0aW9uIG1hdHJpeAoKbGlicmFyeShCYXllc0ZhY3RvcikKCmxtMV9iaWMgPC0gQklDKE1QSF9QdXRhbWVuX1Bhc3REaWZfTG93USkgCk1QSF9QdXRhbWVuX1Bhc3REaWZfTG93UV9Ob0RydWcgPC0gbG1lcihEaWZmZXJlbnRFbmQgfiAxICsgU2Vzc2lvbiArICgxIHwgSUQpLCBkYXRhID0gZGZfTVBIX0xvd1EsIFJFTUw9RikKCgpsbTJfYmljIDwtIEJJQyhNUEhfUHV0YW1lbl9QYXN0RGlmX0xvd1FfTm9EcnVnKSAKCmJpY19iZjEwIDwtIGZ1bmN0aW9uKG51bGwsIGFsdGVybmF0aXZlKSB7Cm5ld19iZiA8LSBleHAoKG51bGwgLSBhbHRlcm5hdGl2ZSkgLyAyKSAjIGNvbnZlcnQgQklDcyB0byBCYXllcyBmYWN0b3IKbmFtZXMobmV3X2JmKSA8LSBOVUxMICMgcmVtb3ZlIEJJQyBsYWJlbApyZXR1cm4obmV3X2JmKSAjIHJldHVybiBCYXllcyBmYWN0b3Igb2YgYWx0ZXJuYXRpdmUgb3ZlciBudWxsIGh5cG90aGVzaXMKfQoKYmljX2JmMTAobG0yX2JpYyxsbTFfYmljKSAjIGNvbnZlcnQgQklDcyB0byBCRgoKClNVTDEgPC0gbG1lcihEaWZmZXJlbnRFbmQgfiAxICsgRHJ1ZypQdXRhbWVuX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9TVUwsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShTVUwxKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CgpTVUwyIDwtIGxtZXIoRGlmZmVyZW50RW5kIH4gMSArIERydWcgKyBQdXRhbWVuX2tpLmMgKyBTZXNzaW9uICsgKDEgfCBJRCksIGRhdGEgPSBkZl9TVUwsIFJFTUw9RikKcHJpbnQoc3VtbWFyeShTVUwyKSwgY29ycj1GKSAjIHByaW50IHN1bW1hcnkgd2l0aG91dCBmaXhlZCBlZmZlY3QgY29ycmVsYXRpb24gbWF0cml4CgpTVUwzIDwtIGxtZXIoRGlmZmVyZW50RW5kIH4gMSArIFB1dGFtZW5fa2kuYyArIFNlc3Npb24gKyAoMSB8IElEKSwgZGF0YSA9IGRmX1NVTCwgUkVNTD1GKQpwcmludChzdW1tYXJ5KFNVTDMpLCBjb3JyPUYpICMgcHJpbnQgc3VtbWFyeSB3aXRob3V0IGZpeGVkIGVmZmVjdCBjb3JyZWxhdGlvbiBtYXRyaXgKClNVTDFfYmljIDwtIEJJQyhTVUwxKSAKU1VMMl9iaWMgPC0gQklDKFNVTDIpIApTVUwzX2JpYyA8LSBCSUMoU1VMMykgCgpiaWNfYmYxMChTVUwyX2JpYyxTVUwxX2JpYykgIyBudWxsIGNvbWVzIGZpcnN0LCB0aGUgcmVzdWx0cyBhcmUgZm9yIHRoZSBudWxsCmJpY19iZjEwKFNVTDNfYmljLFNVTDFfYmljKSAjIGNvbnZlcnQgQklDcyB0byBCRgpiaWNfYmYxMChTVUwzX2JpYyxTVUwyX2JpYykgIyBjb252ZXJ0IEJJQ3MgdG8gQkYKCgpgYGAKCg==